您的位置:首页 > 其它

SDUT 1500 Message Flood

2012-08-14 14:23 253 查看
简单trie树。

代码如下:

#include<iostream>
#include<string.h>
#include<cstdio>
#include<cstdlib>

using namespace std;

int n;

typedef struct node
{
int flag;
node *next[26];
}node;

void strlwr(char *s)    //大写转换小写
{
int i;
for (i=0; i<strlen(s); i++)
if (s[i] >= 'A' && s[i] <= 'Z')
s[i]=s[i]+32;
}

node *newnode()
{
int i;
node *p=new node;
p->flag=0;
for (i=0; i<26; i++)
p->next[i] = NULL;
return p;
}

void insert(node *rt, char s[])    //插入新结点
{
int i, t;
node *p=rt;
int len=strlen(s);
for (i=0; i<len; i++)
{
t=s[i]-'a';
if (p->next[t] == NULL)
p->next[t]=newnode();
p=p->next[t];
}
p->flag=1;
}

void search(node *rt, char *s)    //查找
{
int i, t;
node *p=rt;
int len=strlen(s);
for (i=0; i<len; i++)
{
t=s[i]-'a';
if (p->next[t] == NULL)
return ;
p=p->next[t];
}
if (p->flag == 1)
n--;
if (p->flag)
p->flag++;
}

void del(node * p)    //删除
{
int i;
if(p)
{
for(i=0;i<26;i++)
if(p->next[i])
del(p->next[i]);
}
free(p);
p=NULL;
}

int main()
{
int m, i;
char str[15];
while(cin >> n, n)
{
node *rt=NULL;
cin >> m;
rt=newnode();
for (i=0; i<n; i++)
{
cin >> str;
strlwr(str);
insert(rt, str);
}
for (i=0; i<m; i++)
{
cin >> str;
strlwr(str);
search(rt, str);
}
del(rt);
cout << n << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: