您的位置:首页 > 其它

1251 字典树 模板

2013-09-04 17:27 148 查看
参考资料 :

http://www.wutianqi.com/?p=1359

http://blog.csdn.net/xingyeyongheng/article/category/1516007

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

struct Trie
{
int num;
Trie *next[26];//指针数组
}root;

void createTrie(char *str)//建树
{
int len = strlen(str);
Trie *p = &root, *q;
for(int i = 0; i < len; i++)
{
int id = str[i] - 'a';
if(p->next[id] == NULL)//对应的位置为空
{
q = (Trie *)malloc(sizeof(root));
q->num = 1;
for(int j = 0; j < 26; j++) q->next[j] = NULL;
p->next[id] = q;
p = p->next[id];
}
else
{
p->next[id]->num++;
p = p->next[id];
}
}
}

int findTrie(char *str)
{
int len = strlen(str);
Trie *p = &root;
for(int i = 0; i < len; i++)
{
int id = str[i] - 'a';
p = p->next[id];
if(p == NULL) return 0;
}
return p->num;
}

int main()
{
char str[15];
for(int i = 0; i < 26; i++) root.next[i] = NULL;//初始化,root 不是指针
while(gets(str) && str[0] != '\0') createTrie(str);
memset(str, 0, sizeof(str));
while(scanf("%s", str) != EOF)
{
int ans = findTrie(str);
printf("%d\n", ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: