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 }
posted @ 2012-08-20 09:07  Wheat″  阅读(132)  评论(0)    收藏  举报