字典树
来源:互联网 发布:淘宝fgo充值便宜 编辑:程序博客网 时间:2024/05/21 09:39
通俗的说,字典树就是用一棵树来存储一系列的字符串,每一个点到根节点的路径记录着一个字符串。
http://poj.org/problem?id=1056
该图为存了26个英文字母的字典树,
本题只需要把每一层26个字母改成0 1 两个分支。
<span style="font-size:18px;">#include <stdio.h>#include <string.h>#include <malloc.h>typedef struct ac<span style="white-space:pre"></span>{ struct ac *child[3]; int v;<span style="white-space:pre"></span>//v记录到该点为止,是否记录了一个完整的二进制数}trie;trie *root;int flag=0;void add(char *p)<span style="white-space:pre"></span>//读入一个二进制数{ int len=strlen(p); int i,k; trie *r=root; for(i=0;i<len;i++)<span style="white-space:pre"></span>//改二进制数每一位占一层 { k=p[i]-'0'; if(r->child[k]!=NULL) { r=r->child[k];<span style="white-space:pre"></span> if(r->v==1) flag=1; } else { trie *s=(trie *)malloc(sizeof(trie)); for(int j=0;j<2;j++) s->child[j]=NULL; r->child[k]=s; r=s; } } r->v=1;}void trie_clear(trie *r)<span style="white-space:pre"></span>//内存清理{ if(r==NULL) free(r); else { for(int i=0;i<2;i++) trie_clear(r->child[i]); }}int main(){ char s[15]; int ti=1,i; root=(trie *)malloc(sizeof(trie)); for(i=0;i<2;i++) { root->child[i]=NULL; root->v=0; } while(scanf("%s",s)!=EOF) { if(s[0]=='9') { if(flag) printf("Set %d is not immediately decodable\n",ti++); else printf("Set %d is immediately decodable\n",ti++); flag=0; trie_clear(root); root=(trie *)malloc(sizeof(trie)); for(i=0;i<2;i++) { root->child[i]=NULL; root->v=0; } continue; } add(s); } return 0;}</span>
相关题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1109
0 0
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树。。
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- 字典树
- BZOJ 1003 ZJOI 2006 物流运输 动态规划+SPFA
- 关于javascript的delete
- 从B树、B+树、B*树谈到R 树
- 一个初入软件开发行业的毕业生关于梦想的思考
- 杭电1250 Hat's Fibonacci(大数+1000进制输出)
- 字典树
- win7下python 下安装Cython
- 【无限互联】学员作品:IT之家IOS客户端
- 开放的平台、向上的文化——揭秘万达电商(4)
- 交作业 php100 第五讲 九九乘法表
- 仿小说阅读器
- 移动营销哪家强?微库为上万家品牌服务的营销启示
- c语言函数--O
- 黑马程序员-----Java基础IO流综合实例