| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
WA怕了。。怎么都找不到错。。用二叉搜索树做的用类写的。。麻烦高手看看啊
# include <iostream>
# include <cstdio>
# include <cstring>
using namespace std;
struct node
{
char *data;
int place;
node *left;
node *right;
};
class list
{
public:
int num;
node* data[100000];
list()
{
num=0;
}
void add(node *p)
{
data[++num]=p;
}
void sort()
{
for(int i=1;i<num;i++)
for(int j=1;j<=num-i;j++)
if(data[j]->place>data[j+1]->place)
{
node *temp=data[j];
data[j]=data[j+1];
data[j+1]=temp;
}
}
void print()
{
for(int i=1;i<=num;i++) cout<<" "<<data[i]->data;
cout<<endl;
}
};
class tree
{
public:
node *root;
tree()
{
root=NULL;
}
void add(char *str,int count);
node* search(char *str);
};
void tree::add(char *str,int count)
{
if(!root)
{
root=new node;
root->data=str;
root->left=NULL;
root->right=NULL;
root->place=count;
}
else
{
node *p=root;
while(1)
{
if(strcmp(str,p->data)==1)
{
if(p->right!=NULL) p=p->right;
else break;
}
else if(strcmp(str,p->data)==-1)
{
if(p->left!=NULL) p=p->left;
else break;
}
else return;
}
if(strcmp(str,p->data)==1)
{
p->right=new node;
p=p->right;
}
else
{
p->left=new node;
p=p->left;
}
p->data=str;
p->left=p->right=NULL;
p->place=count;
}
}
node* tree::search(char *str)
{
node *p=root;
if(root==NULL) return NULL;
while(p)
{
switch(strcmp(str,p->data))
{
case 1:
p=p->right;
break;
case 0:
return p;
case -1:
p=p->left;
break;
};
}
return NULL;
}
int main()
{
tree st;
int count=1;
while(1)
{
char *p=new char[19];
cin>>p;
if(!strcmp(p,"#"))
{
delete[] p;
break;
}
st.add(p,count++);
}
while(1)
{
char *p=new char[19];
cin>>p;
if(!strcmp(p,"#"))
{
delete[] p;
break;
}
if(st.search(p)!=NULL)
{
cout<<p<<" is correct"<<endl;
delete[] p;
}
else
{
cout<<p<<":";
list result;
node* res;
char temp[19];
for(int i=0;i<strlen(p);i++) //删除
{
strcpy(temp,p);
for(int j=i;j<strlen(p);j++) temp[j]=temp[j+1];
if(res=st.search(temp)) result.add(res);
}
for(int i=0;i<strlen(p);i++)//替换
{
strcpy(temp,p);
for(char tempc='a';tempc<='z';tempc++)
{
temp[i]=tempc;
if(res=st.search(temp)) result.add(res);
}
}
for(int i=0;i<=strlen(p);i++)//增加
{
strcpy(temp,p);
for(int j=strlen(p);j>=i;j--) temp[j+1]=temp[j];
for(char tempc='a';tempc<='z';tempc++)
{
temp[i]=tempc;
if(res=st.search(temp)) result.add(res);
}
}
result.sort();
result.print();
delete[] p;
}
}
system("pause");
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator