嘀嘀嘀
有人知道 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
原文地址:http://blog.csdn.net/kewowlo/article/details/38898889