POJ2001 字典树
2015-08-04 01:16
405 查看
写法一:
写法二:
#include<stdio.h> #include<string.h> #include<stdlib.h> struct node{ int count; struct node *next[26]; }; struct node *root,*p,*q; char s[1010][25]; int main(){ int i,j,k,m,n=0; root=new node; root->count=0; for(i=0;i<26;i++)root->next[i]=NULL; while(scanf("%s",&s[++n])!=EOF){ p=root; k=strlen(s ); for(i=0;i<k;i++){ if(p->next[s [i]-'a']==NULL){ q=new node; q->count=1; for(j=0;j<26;j++)q->next[j]=NULL; p->next[s [i]-'a']=q; p=q; }else{ p=p->next[s [i]-'a']; p->count++; } } } for(i=1;i<=n;i++){ printf("%s ",s[i]); p=root; k=strlen(s[i]); for(j=0;j<k;j++){ p=p->next[s[i][j]-'a']; printf("%c",s[i][j]); if(p->count==1)break; } printf("\n"); } return 0; }
写法二:
#include<stdio.h> #include<string.h> #include<stdlib.h> struct node{ int count; struct node *next[26]; node(){ count=0; memset(next,0,sizeof(next)); } }; struct node *root,*p,*q; char s[1010][25]; void insert(char *st){ int i,j,k; p=root; k=strlen(st); for(i=0;i<k;i++){ if(p->next[st[i]-'a']==NULL){ q=new node; p->next[st[i]-'a']=q; } p=p->next[st[i]-'a']; p->count++; } } void search(char *st){ int i,j,k; p=root; k=strlen(st); for(i=0;i<k;i++){ p=p->next[st[i]-'a']; printf("%c",st[i]); if(p->count==1)break; } } int main(){ int i,j,k,m,n=0; root=new node; while(scanf("%s",&s[++n])!=EOF) insert(s ); for(i=1;i<=n;i++){ printf("%s ",s[i]); search(s[i]); printf("\n"); } return 0; }
相关文章推荐
- 矩阵构造方法
- CodeRush使用教程一:代码分析
- 欢迎使用CSDN-markdown编辑器
- javaScript 页面自动加载事件详解
- 2015.8.4
- 算法设计与分析:第二章 递归 2.2买商品
- 看《模拟游戏》有感
- 单点CURL
- 算法设计与分析:第二章 递归 2.1计数排序之统计数对
- 算法设计与分析:第一张 算法分析介绍 1.3逻辑推理之谁能预测分数
- HDU 4358 Boring counting dfs序+莫队算法
- 算法设计与分析:第一张 算法分析介绍 1.2逻辑推理之警察抓小偷
- 1163: [Baltic2008]Mafia
- c++编译链接
- 算法设计与分析: 第一章 算法分析介绍 1.1求任意三个已知数的最小公倍数
- 网站流量的统计中的IP、PV、UV
- Swift对象存储API概述
- 判断单链表是否有环
- Leetcode #90 Subsets II
- 编程之美:第四章 数字之趣 4.10_2数字哑谜和回文