• 字典树模板


    字典树模板

    #include<stdio.h>
    #include<string.h>
    #define kind 26//字母种类
    struct Treenode//树的结点结构
    {
        int count;//这个附加变量在本题中记录遍历到该结点形成的字符串出现的次数,在不同题中可记录不同的内容。
        Treenode *next[kind];//指向儿子结点
        Treenode()//每个结点的初始化
        {
            count=1;
            for(int i=0;i<kind;i++)
                next[i]=NULL;
        }
    };
    void insert(Treenode *&root,char *word)//向以root为根结点的树中插入串word
    {
        Treenode *location=root;
        int i=0,branch=0;
        if(location==NULL) 
        {
            location=new Treenode();
            root=location;
        }
        while(word[i])
        {
            branch=word[i]-'a';
            if(location->next[branch]) location->next[branch]->count++;//如果该字符存在,串数量加1
            else location->next[branch]=new Treenode();//如果不存在,建新结点
            i++;
            location=location->next[branch];
        }
    }
    int search(Treenode *&root,char *word)//查找,与插入类似
    {
        Treenode *location=root;
        int i=0,branch=0,ans;
        if(location==NULL) return 0;
        while(word[i])
        {
            branch=word[i]-'a';
            if(!location->next[branch]) return 0;
            i++;
            location=location->next[branch];
            ans=location->count;
        }
        return ans;
    }
    int main()
    {
        char word[101][10];
        char ask[10];
        Treenode *root=NULL;
        int n,i;
        scanf("%d",&n);
           for(i=0;i<n;i++)
           {
               scanf("%s",word[i]);
            insert(root,word[i]);
           }
           while(scanf("%s",ask)!=EOF)
           {
              printf("%d
    ",search(root,ask));
           }
        return 0;
    }
  • 相关阅读:
    图论————最短路,最小生成树。
    复习KMP
    P3930 SAC E#1
    P3818 小A和uim之大逃离 II
    洛谷P3928 SAC E#1
    洛谷-P3927 SAC E#1
    求逆欧拉函数(arc)
    《公式证明:欧拉函数》
    求一个极大数的欧拉函数 phi(i)
    仙人掌(cactus)
  • 原文地址:https://www.cnblogs.com/--lr/p/7668063.html
Copyright © 2020-2023  润新知