题目:poj2503
题意:给几个单词的意思,再给几个单词,查字典~
解答:字典树咯(注意节点定义,每个节点定义一个字符数组)
注意:空行停止!!!
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
const int sonnum = 26,base = 'a';
struct Trie
{
int num;
bool terminal;
struct Trie *son[sonnum];
char mean[25];
};
Trie *NewTrie()
{
Trie *temp = new Trie;
temp -> num = 1;
temp -> terminal = false;
memset(temp -> mean,0,sizeof(temp->mean));///
for(int i = 0;i < sonnum;i++)
{
temp -> son[i] = NULL;
}
return temp;
}
void Insert(Trie *pnt,char *s1,char *s2,int len1,int len2)
{
Trie *temp = pnt;
for(int i = 0;i < len1;i++)
{
if(temp -> son[s1[i]-base] == NULL)
{
temp -> son[s1[i]-base] = NewTrie();
}
else
temp -> son[s1[i]-base] -> num++;
temp = temp -> son[s1[i]-base];
}
temp -> terminal = true;
for(int i = 0;i < len2;i++)
{
temp -> mean[i] = s2[i];
}
// strcpy(temp->mean,s2);(strcpy函数:字符串复制)
return;
}
Trie *Find(Trie *pnt,char *s,int len)
{
Trie *temp = pnt;
bool flag = false;
for(int i = 0;i < len;i++)
{
if(temp -> son[s[i]-base] == NULL)
{
printf("eh\n");
return temp;
}
else temp = temp -> son[s[i]-base];
}
if(temp -> terminal == true)
{
printf("%s\n",temp -> mean);
return temp;
}
return temp;
}
int main()
{
Trie *tree = NewTrie();
char tm;
char a[20],b[20];
while(1)
{
scanf("%s",b);
tm = getchar();///
if(tm == '\n')///
break;
scanf("%s",a);
Insert(tree,a,b,strlen(a),strlen(b));
}
Find(tree,b,strlen(b));///注意这里
while(~scanf("%s",b))
{
Find(tree,b,strlen(b));
}
return 0;
}