poj2503 -- Babelfish
一道很好的字典树题目,用每组第二个单词构造字典树,最后一个节点存第一个单词,其他节点存ch,接着对每个输入进行查询
View Code
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #define M 26 5 using namespace std; 6 int ii; 7 struct Tree{ 8 Tree* next[M]; 9 char val[100]; 10 Tree() 11 { 12 for(ii=0;ii<M;ii++) 13 next[ii] = 0; 14 strcpy(val,"eh"); 15 } 16 ~Tree() 17 { 18 for (ii=0;ii<M;ii++) 19 delete(next[ii]); 20 } 21 }; 22 Tree* root = new Tree; 23 void insert(char ss[],char s[]) 24 { 25 int len,i,j; 26 Tree* p; 27 len = strlen(s); 28 p = root; 29 for(i=0;i<len;i++) 30 { 31 j = s[i] - 'a'; 32 if(p->next[j]==0) 33 p->next[j] = new Tree; 34 p = p->next[j]; 35 } 36 strcpy(p->val,ss); 37 } 38 void query(char word[]) 39 { 40 int len,i,j; 41 Tree* p; 42 len = strlen(word); 43 p = root; 44 for(i=0;i<len;i++) 45 { 46 j = word[i] - 'a'; 47 if(p->next[j]!=0) 48 p = p->next[j]; 49 else break; 50 } 51 printf("%s\n",p->val); 52 } 53 int main(void) 54 { 55 char word[30],ans[30],a[60]; 56 while(gets(a)&&a[0]!='\0') 57 { 58 sscanf(a,"%s %s",&word,&ans); 59 insert(word,ans); 60 } 61 while(scanf("%s",word)!=EOF) 62 { 63 query(word); 64 } 65 return 0; 66 }
另外一个用map做的
View Code
1 #include<iostream> 2 #include<map> 3 using namespace std; 4 #include<string> 5 map<string,string>mp; 6 int main() 7 { 8 char a[30],b[15],c[15]; 9 while(gets(a)&&a[0]!='\0') 10 { 11 sscanf(a,"%s %s",&b,&c); 12 mp[c]=b; 13 } 14 char s[15]; 15 while(gets(s)&&s[0]!='\0') 16 { 17 if(mp[s][0]=='\0')cout<<"eh\n"; 18 else cout<<mp[s]<<endl; 19 } 20 return 0; 21 22 }


浙公网安备 33010602011771号