首页 > 代码库 > 【字典树】POJ 2418 Hardwood Species
【字典树】POJ 2418 Hardwood Species
嘀嘀嘀
有人知道 Trie()里 加了 sz=1;就一直CE怎么破???如果有人看到能教教我吗??我还不会c++弱菊不胜感谢!Orz
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<ctype.h> #include<math.h> #include<string> #include<iostream> #include<algorithm> using namespace std; #include<queue> #include<stack> #include<vector> #include<deque> #include<set> #include<map> #define Word_Len 1000010 #define Sigma_size 128 typedef struct Trie { int ch[Word_Len][Sigma_size]; //Word_Len是字典树的节点数 若都是小写字母Sigma_size=26 int Have_word[Word_Len]; //这个节点下有几个单词 int sz; Trie () {//这里!!!~~~~~ memset(ch,0,sizeof(ch)); memset(Have_word,0,sizeof(Have_word)); } }; Trie ac; int tol; void insert(char *s) //把v数字加给 s单词最后一个字母 { int u = 0, len = strlen(s); for(int i = 0; i < len; i++) { int c = s[i]; if(!ac.ch[u][c]) //节点不存在就新建后附加 ac.ch[u][c] = ac.sz++; u = ac.ch[u][c]; } ac.Have_word[u]++; //现在的u就是这个单词的最后一个位置 } char s[222]; void find(int x,int k) { for(int i=0; i<128; i++) { if(ac.ch[x][i]) { int j=ac.ch[x][i]; s[k]=i; if(ac.Have_word[j]) { s[k+1]='\0'; printf("%s %.4lf\n",s,ac.Have_word[j]*100.0/tol); } find(j,k+1); } } } int main() { char c[222]; tol=0; ac.sz=1; while(gets(c)&&c[0]) { insert(c); tol++; } find(0,0); return 0; }
【字典树】POJ 2418 Hardwood Species
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。