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 }

 

posted on 2013-03-28 20:23  straw_berry  阅读(208)  评论(0编辑  收藏  举报