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 ;
}

 

posted @ 2013-04-01 19:34  yelan@yelan  阅读(154)  评论(0编辑  收藏  举报