a ahat hat hatword hziee word
ahat hatword#include<stdio.h> #include<iostream> #include<string.h> #include<algorithm> using namespace std; typedef struct nn { int flag; struct nn *next[26]; }node; typedef struct strin { int len,indx; char str[105]; }String; int cmp(String s1,String s2) { return s1.len<s2.len; } int cmp1(String s1,String s2) { return s1.indx<s2.indx; } node *builde() { node *p=new node; p->flag=0; for(int i=0;i<26;i++) p->next[i]=NULL; return p; } node *root; void insert(char s[]) { node *p=root; for(int i=0;s[i]!='\0';i++) { if(p->next[s[i]-'a']==NULL) p->next[s[i]-'a']=builde(); p=p->next[s[i]-'a']; } p->flag=1; } String s[50005]; int flog; void dfs(int k,int si,int num) { node *p=root; if(num>2) return ; if(si==s[k].len) { if(num==2)flog=1; return ; } for(int j=si;j<s[k].len;j++) { if(p->next[s[k].str[j]-'a']==NULL) return ; p=p->next[s[k].str[j]-'a']; if(p->flag) { dfs(k,j+1,num+1); if(flog!=0) return ; } } } int main() { int n=0,m=0; while(scanf("%s",s[n].str)>0&&s[n].str[0]!='#') { s[n].len=strlen(s[n].str); s[n].indx=n; n++; } sort(s,s+n,cmp); root=builde(); for(int i=0;i<n;i++) { flog=0; dfs(i,0,0); if(flog==1)s[m++]=s[i]; insert(s[i].str); } sort(s,s+m,cmp1); for(int i=0;i<m;i++) printf("%s\n",s[i].str); }
hdu1247Hat’s Words (组合单词,字典树+DFS),布布扣,bubuko.com
hdu1247Hat’s Words (组合单词,字典树+DFS)
原文地址:http://blog.csdn.net/u010372095/article/details/38144069