您的位置:首页 > 其它

动态建树之——一个单词是否在其他单词中以前缀的形式存在

2016-08-15 14:38 281 查看
题目:poj1056

题意:判断一个单词是否在其他单词中以前缀的形式存在

解答:建立字典树。在读到单词末尾的时候如果发现它已经有了,就返回false

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int sonnum = 3;
int ok = 1;
struct Trie
{
int num;
bool terminal;
struct Trie *son[sonnum];
};
Trie *NewTrie()
{
Trie *temp = new Trie;
temp -> num = 1;
temp -> terminal = false;
for(int i = 0;i < sonnum;i++)
temp -> son[i] = NULL;
return temp;
}
void Insert(Trie *pnt,char *s,int len)
{
Trie *temp = pnt;
for(int i = 0;i < len;i++)
{
if(temp -> son[s[i] - '0'] == NULL)
temp -> son[s[i]-'0'] = NewTrie();
else
temp -> son[s[i] - '0'] -> num++;
temp = temp -> son[s[i] - '0'];
}
temp -> terminal = true;
if(temp -> num > 1)
ok = 0;
return;
}

int main()
{
char a[10];
int num = 1;
Trie *tree = NewTrie();
while(~scanf("%s",a))
{
if(strlen(a) == 1 && a[0] == '9')
{
if(ok)
printf("Set %d is immediately decodable\n",num++);
else
printf("Set %d is not immediately decodable\n",num++);
Trie *tree = NewTrie();
ok = 1;
continue;
}
Insert(tree,a,strlen(a));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐