您的位置:首页 > 其它

字典树模板

2016-01-02 17:59 330 查看
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<map>
#include<iostream>
#include<algorithm>
using namespace std;
struct trie
{
int cont;
trie *next[27];
trie()
{
cont=0;
memset(next,0,sizeof(next));
}
};
trie *root;
void init(char *v)
{
trie *p=root;
for(int i=0; v[i]; i++)
{
int pet=v[i]-'a';
if(p->next[pet]==NULL)
p->next[pet]=new trie();
p=p->next[pet];
p->cont++;
}
}
int finde(char *v)
{
trie *p=root;
int i;
for(i=0; v[i]; i++)
{
int tep=v[i]-'a';
if(p->cont==1)
break;
p=p->next[tep];
}
return i;
}
void del(trie *p)
{
for(int i=0; i<26; i++)
{
if(p->next[i]!=NULL)
del(p->next[i]);
}
free(p);
}
int main()
{
char ch[1005][25];
char v[25];
int i=0;
root=new trie();//先为跟节点申请内存;
while(gets(ch[i]),strcmp(ch[i],""))
{
init(ch[i]);
//strcpy(ch[i],v);
i++;
}
for(int j=0; j<=i; j++)
{
char v[25];
int t=finde(ch[j]);
//printf("%s %d\n",ch[j],t);
printf("%s ",ch[j]);
for(int k=0; k<t; k++)
printf("%c",ch[j][k]);
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: