您的位置:首页 > 其它

【字典树】POJ 2418 Hardwood Species

2014-08-28 15:35 387 查看
嘀嘀嘀

有人知道 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: