POJ 2001 Shortest Prefixes 动态Trie (二)

2014-11-24 02:37:42 · 作者: · 浏览: 3
ode *next[26]; // next str
}root;
void Initial(node *t)
{
for(int i = 0;i < 26; i++)
t->next[i]=NULL;
}
void Insert(alpha s)
{
int length = s.len;
node *p = &root;
for(int i = 0; i < length; i++)
{
int tmp = s.a[i] - 'a';
if(p->next[tmp] == NULL)
{
p->next[tmp] = new node;
Initial(p->next[tmp]);
}
p = p->next[tmp];
p->val++;
}
}
void Find(alpha s)
{
int length = s.len;
node *p = &root;
for(int i = 0; i < length; i++)
{
int tmp = s.a[i] - 'a';
printf("%c",s.a[i]);
if(p->next[tmp] != NULL && p->next[tmp]->val == 1)
return ;
p = p->next[tmp];
}
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int cnt = 0;
Initial(&root);
while(scanf("%s",str[cnt].a) != EOF)
{
str[cnt].len = strlen(str[cnt].a);
Insert(str[cnt]);
cnt++;
}
for(int i = 0; i < cnt; i++)
{
printf("%s ",str[i].a);
Find(str[i]);
puts("");
}
return 0;
}