字典树的问题

作者在 2012-03-22 13:27:25 发布以下内容

   在美丽大兴安岭原始森林中存在数量繁多的物种,在勘察员带来的各种动物资料中有未统计数量的原始动物的名单。科学家想判断这片森林中哪种动物的数量最多,但是由于数据太过庞大,科学家终于忍受不了,想请聪明如你的ACMer来帮忙。

输入第一行输入动物名字的数量N(1<= N <= 10000),接下来的N行输入N个字符串表示动物的名字(字符串的长度不超过10,字符串全为小写字母,并且只有一组测试数据)。输出输出这些动物中最多的动物的名字与数量,并用空格隔开(数据保证最多的动物不会出现两种以上)。样例输入10 boar pig sheep gazelle sheep sheep alpaca alpaca marmot mole样例输出sheep 3
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct tree  //定义字典树
{
    struct tree *a[26];
    int num;
}node,*Node;
Node root=(Node)malloc(sizeof(node));
void cls(Node root)  //初始化字典树
{
    for(int i=0;i<26;i++)
        root->a[i]=NULL;
}
int insert(char *in) //对输入的字符串分别对应存入字典树内
{
    int i,len=strlen(in);
    Node current,new_node;
    current=root;
    for(i=0;i<len;i++)
    {
        int co=in[i]-'a';
        if(current->a[co]==NULL)  //下一个节点为空,建立新的节点
        {
            new_node=(Node)malloc(sizeof(node));
            current->a[co]=new_node;
            current=new_node;
            current->num=0;
            cls(current);
        }
        else  
            current=current->a[co];
    }
    current->num++;
    return current->num;  //返回与这个字符串相等的字符串的个数
}
int main()
{
    int n,max=0;
    char animal_1[11],animal_2[11];
    scanf("%d%*c",&n);
    cls(root);
    while(n--)
    {
        gets(animal_1);
        int su=insert(animal_1);//返回的字符串的个数与上一个字符串个数相比较
        if(su>max)
        {
            strcpy(animal_2,animal_1);//把个数多的字符串存储到animal_2这个数组中
            max=su;
        }
    }
    printf("%s %d\n",animal_2,max);//输出
    return 0;
}
 
默认分类 | 阅读 1211 次
文章评论,共0条
游客请输入验证码
文章分类
最新评论