Shortest Prefixes
http://poj.org/problem?id=2001
View Code
#include<stdio.h> #include<string.h> #include<malloc.h> struct trie { bool isstr ; int num ; trie *next[26] ; } ; void insert(trie *root, char *s) { int i ; if(root==NULL||*s=='\0') return ; trie *p = root ; while(*s) { if(p->next[*s-'a']==NULL) { trie *q = (trie*)malloc(sizeof(trie)) ; for(i=0; i<26; i++) q->next[i] = NULL ; q->isstr = false ; q->num = 1 ; p->next[*s-'a'] = q ; p = p->next[*s-'a'] ; } else { p = p->next[*s-'a'] ; p->num++ ; } s++ ; } p->isstr = true ; } void search(trie *root, char *s) { trie *p = root ; while(p&&*s) { if(p->next[*s-'a']->num==1) { printf("%c", *s) ; return ; } else printf("%c",*s) ; p = p->next[*s-'a'] ; s++ ; } } void del(trie *root) { int i ; for(i=0; i<26; i++) { if(root->next[i]!=NULL) { del(root->next[i]) ; } } delete root ; } int main() { //freopen("a.txt","r",stdin); int i ; char s[1010][25] ; trie *root = (trie*)malloc(sizeof(trie)) ; for(i=0; i<26; i++) root->next[i] = NULL ; root->isstr = false ; root->num = 1 ; int n = 0 ; while(gets(s[n])) { insert(root, s[n]) ; n++ ; } int t = 0 ; while(t<n) { printf("%s ",s[t]) ; search(root, s[t]) ; printf("\n") ; t++ ; } del(root) ; return 0 ; }