HOJ 1898 Babelfish(Trie树)

题意就是先输入一个字典: 目标字符串-----输入字符串

然后输入一个字符串,在上面的对应关系中进行查找,如果有则输出目标字符串,没有则输出eh。


如果不想超时的话,明显就要套字典树了。

代码贴上来,留作模板。字典树还是挺简单易懂的嘛。。。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <memory.h>

using namespace std;

const int num_char=26;

struct TrieNode
{
        TrieNode* branch[num_char];
        char data[12];
};

TrieNode head;

int insert(const char *des,const char *src)
{

    TrieNode *hp=&head;
    while(*src!=0)
    {
        if((hp->branch[*src-'a'])==NULL)hp->branch[*src-'a']=new TrieNode();
        hp=hp->branch[*src-'a'];
        src++;
    }
 //   if((hp->data)==NULL)hp->data=new char[strlen(des)+1];
    strcpy(hp->data,des);
    return 0;
}
bool search(const char *str,char *entry)
{
    TrieNode* t=&head;
    while(*str!=0)
    {
        if((t->branch[*str-'a'])==NULL)return false;
        t=(t->branch[*str-'a']);
        str++;
    }
    strcpy(entry,t->data);
    return true;

}
int main()
{
        char t[40];
        while(gets(t))
        {

            char src[12],des[12];
            if(t[0]=='\0')break;
            sscanf(t,"%s %s",des,src);
            insert(des,src);
        }
        char consult[12];
        while(scanf("%s",consult)!=EOF)
        {
            char entry[12];
            if(search(consult,entry))
        printf("%s\n",entry);
        else printf("eh\n");
        }
        return 0;

}


你可能感兴趣的:(struct,null,search,insert,HP,branch)