您的位置:首页 > 其它

HOJ 1898 Babelfish(Trie树)

2012-08-27 22:26 459 查看
题意就是先输入一个字典: 目标字符串-----输入字符串

然后输入一个字符串,在上面的对应关系中进行查找,如果有则输出目标字符串,没有则输出eh。

如果不想超时的话,明显就要套字典树了。

代码贴上来,留作模板。字典树还是挺简单易懂的嘛。。。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <memory.h>

using namespace std;

const int num_char=26;

struct TrieNode
{
TrieNode* branch[num_char];
char data[12];
};

TrieNode head;

int insert(const char *des,const char *src)
{

TrieNode *hp=&head;
while(*src!=0)
{
if((hp->branch[*src-'a'])==NULL)hp->branch[*src-'a']=new TrieNode();
hp=hp->branch[*src-'a'];
src++;
}
//   if((hp->data)==NULL)hp->data=new char[strlen(des)+1];
strcpy(hp->data,des);
return 0;
}
bool search(const char *str,char *entry)
{
TrieNode* t=&head;
while(*str!=0)
{
if((t->branch[*str-'a'])==NULL)return false;
t=(t->branch[*str-'a']);
str++;
}
strcpy(entry,t->data);
return true;

}
int main()
{
char t[40];
while(gets(t))
{

char src[12],des[12];
if(t[0]=='\0')break;
sscanf(t,"%s %s",des,src);
insert(des,src);
}
char consult[12];
while(scanf("%s",consult)!=EOF)
{
char entry[12];
if(search(consult,entry))
printf("%s\n",entry);
else printf("eh\n");
}
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: