Shortest Prefixes 字典树
virtual judge 树 A题
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 struct node 5 { 6 int flag; 7 struct node *next[26]; 8 }; 9 struct node *creat() 10 { 11 struct node *p; 12 p=(struct node *)malloc(sizeof(struct node)); 13 for(int i=0;i<26;i++) 14 p->next[i]=NULL; 15 p->flag=1; 16 return p; 17 } 18 void insert(struct node *p,char s[]) 19 { 20 int i,t; 21 for(i=0;s[i]!='\0';i++) 22 { 23 t=s[i]-'a'; 24 if(p->next[t]==NULL) 25 p->next[t]=creat(); 26 else 27 p->next[t]->flag++; 28 p=p->next[t]; 29 } 30 } 31 void shortt(struct node *p,char s[]) 32 { 33 int i,t; 34 char ss[100]; 35 for(i=0;s[i]!='\0';i++) 36 { 37 ss[i]=s[i]; 38 t=s[i]-'a'; 39 if(s[i+1]=='\0'||p->next[t]->flag==1) 40 { 41 ss[i+1]='\0'; 42 break; 43 } 44 p=p->next[t]; 45 } 46 printf("%s\n",ss); 47 48 } 49 int main () 50 { 51 char s[1010][100]; 52 int i,j; 53 struct node *p; 54 p=creat(); 55 for(i=0;scanf("%s",s[i]) != EOF;i++) 56 insert(p,s[i]); 57 for(j=0;j<i;j++) 58 { 59 printf("%s ",s[j]); 60 shortt(p,s[j]); 61 } 62 return 0; 63 }