就是查找这个单词能不能有两个单词组成,简单的字典树题目
//////////////////////////////////////////////////////////////
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std; #define maxn 26 struct node
{
int sum;
node *next[];
}; node *root;
char a[][]; void Insert(char *s);//建立字典树
bool Find(char *s);
bool Query(char *s); int main()
{
int i, n=; root = new node(); for(i=; scanf("%s", a[i]) != EOF; i++)
Insert(a[i]);
for(n=, i=; i<=n; i++)
{
if(Query(a[i]))
printf("%s\n", a[i]);
} return ;
} void Insert(char *s)
{
node *p = root; for(int i=; s[i]; i++)
{
int k = s[i] - 'a'; if(!p->next[k])
p->next[k] = new node();
p = p->next[k];
} p->sum = ;
}
bool Find(char *s)
{
node *p = root; for(int i=; s[i]; i++)
{
int k = s[i] - 'a'; if(!p->next[k])
return false;
p = p->next[k];
} if(p->sum)return true;
return false;
}
bool Query(char *s)
{
node *p = root; for(int i=; s[i]; i++)
{
int k = s[i] - 'a'; p = p->next[k]; if(p->sum && Find(s+i+))
return true;
} return false;
}