POJ_2001_Shortest Prefixes

题意:给定N个单词的字典,输出N个单词和这N个单词的确定字符串。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<map>
#include<cmath>
using namespace std;
struct Trie  //字典树结构
{
    Trie *child[26];
    int num;   //记录该字母的出现次数
    Trie() //构造函数
    {
        num=0;
        memset(child,0,sizeof(child));
    }
};
Trie *root,*s;
void Create(char *str)  //插入单词
{
    s=root;
    int i=0;
    while(str[i])
    {
        int id=str[i]-'a';
        if(s->child[id]==0) //如果该字母还没有出现在字典中
        {
        s->child[id]=new Trie;
        s=s->child[id];
        }
        else
        {
            s=s->child[id];
            s->num++;
        }
        i++;
    }
}
void Search(char *str)
{
    s=root;
    for(int i=0;i<strlen(str);++i)
    {
        int id=str[i]-'a';
        s=s->child[id];
        printf("%c",str[i]);
        if(s->num==0) break; //如果该字母只出现了一次
    }
    printf("\n");
}
char a[1002][30];
int main()
{
    int i=0,j;
    root=new Trie;
    while(~scanf("%s",a[i]))
    {
        Create(a[i]);
        i++;
    }
    for(j=0;j<i;++j)
    {
        printf("%s ",a[j]);
        Search(a[j]);
    }
    return 0;
}

 

posted @ 2013-04-24 17:15  小仪在努力~  阅读(100)  评论(0)    收藏  举报