首页 > 代码库 > poj-2503
poj-2503
嘻嘻,这个是自己的思想打的代码,独一无二,居然过了。首先构造字典树的节点,包括一个root,我把要保存的对应信息,如dog ogdoy中的dog保存在一个数组中,这个数组原本是一个单词结束标志,注意string的使用,我的代码内存快爆掉了,刚刚过的。
#include<cstdio>#include<iostream>#include<queue>#include<string>#include<cstring>#include<algorithm>using namespace std;char str[50];char str1[11];char str2[11];string temp;const int maxn = 1000100;struct trie{ int ch[maxn][26],sz,root; string inf[maxn]; int newnode(){ inf[sz] = "eh"; memset(ch[sz],0,sizeof(ch[sz])); return sz++; } void init(){ sz = 0; root = newnode(); }void insert(char *str1,char* str2){ int length = strlen(str1); int now = root; for(int i = 0;i < length;i++){ int &temp = ch[now][str1[i] - ‘a‘]; if(!temp){ temp = newnode(); } now = temp; } inf[now] = str2;}void query(char *str){ int len = strlen(str); int now = root; for(int i = 0;i < len;i++){ now = ch[now][str[i]-‘a‘]; int tmp = now; if(!tmp) { temp = "eh"; return; } else { now = tmp; } } temp = inf[now];}}tr;int main(){ tr.init(); while(gets(str)&&str[0]){ sscanf(str,"%s%s",str2,str1); tr.insert(str1,str2); } while(scanf("%s",str) != EOF){ tr.query(str); cout << temp << endl; } return 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。