POJ2503 Babelfish Tire树

来源:互联网 发布:淘宝助理没有宝贝管理 编辑:程序博客网 时间:2024/06/08 02:39

题目大意:给出一个单词之间的意义对应关系,然后有若干次询问,每次询问给出一个单词,让你输出与该单词对应的单词。


分析:map可以做,tire树也行。可以说是 HDU1075 的简易版。不过这题真正纠结人的是输入部分====卡了我n久啊。


实现代码如下:

#include <cstdio>#include <cstdlib>#include <iostream>#include <cstring>#include <string>using namespace std;#define son_num 30struct tire{    char dic[15];    bool terminal;    struct tire *next[son_num];};tire *root;tire *init(){    tire *p=(tire *)malloc(sizeof(tire));    for(int i=0;i<son_num;i++)      p->next[i]=NULL;    p->terminal=false;    return p;}void insert(char earth[],char mars[]){    int len=strlen(mars);    tire *p=root;    for(int i=0;i<len;i++)    {        if(!p->next[ mars[i]-'a' ])          p->next[ mars[i]-'a' ]=init();        p=p->next[ mars[i]-'a' ];    }    p->terminal=true;    strcpy(p->dic,earth);}void find(char earth[]){    int len=strlen(earth);    tire *p=root;    int i=0;    while(earth[i]!='\0'&&p->next[ earth[i]-'a' ])    {        p=p->next[ earth[i]-'a' ];        i++;    }    if(p->terminal&&earth[i]=='\0') printf("%s\n",p->dic);    else printf("eh\n");}int main(){    char earth[15],mars[15],str[30];    root=init();    while(gets(str)&&str[0]!='\0')    {        int len=strlen(str);        int i=0,cnt=0;        for(;i<len;i++)        {            if(str[i]==' ') break;            earth[cnt++]=str[i];        }        earth[cnt]='\0';        i++;        cnt=0;        for(;i<len;i++)          mars[cnt++]=str[i];        mars[cnt]='\0';        insert(earth,mars);    }    while(gets(mars)&&mars[0]!='\0')      find(mars);    return 0;}


0 0
原创粉丝点击