zoukankan      html  css  js  c++  java
  • 字典树模板

    附一个比较详细的讲解 http://www.cnblogs.com/tanky_woo/archive/2010/09/24/1833717.html

    模板题(HDU 1671)

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    using namespace std;
    const int MAXN=10;
    typedef struct Trie{
       int v;
       Trie *Next[MAXN];
    }Trie;
    Trie *root;
    void createTrie(char *str)
    {
        int len=strlen(str);
        Trie *p=root,*q;
        for(int i=0;i<len;i++)
        {
         int id=str[i]-'0';
         if(p->Next[id]==NULL)
         {
             q=(Trie*)malloc(sizeof(Trie));
             q->v=1;
             for(int j=0;j<MAXN;j++)
                q->Next[j]=NULL;
             p->Next[id]=q;
             p=p->Next[id];
         }
         else
         {
             p->Next[id]->v++;
             p=p->Next[id];
         }
        }
    }
    int findTrie(char *str)
    {
        int len=strlen(str);
        Trie *p=root;
        for(int i=0;i<len;i++)
        {
            int id=str[i]-'0';
            p=p->Next[id];
            if(p==NULL)
                return 0;
        }
        return p->v;
    }
    int  deal(Trie *T)
    {
        int i;
        if(T==NULL)
            return 0;
        for(int i=0;i<MAXN;i++)
        {
            if(T->Next[i]!=NULL)
                deal(T->Next[i]);
        }
        free(T);
        return 0;
    }
    int main()
    {
        char str[10010][15];
        int t,n,flag;
        scanf("%d",&t);
        while(t--){
                flag=1;
            root=(Trie*)malloc(sizeof(Trie));
        for(int i=0;i<MAXN;i++)
          root->Next[i]=NULL;
          scanf("%d",&n);
         for(int i=0;i<n;i++)
         {
           scanf("%s",str[i]);
           createTrie(str[i]);
         }
        for(int i=0;i<n;i++)
        {
            if(findTrie(str[i])>1)
            {
                flag=0;
                break;
            }
        }
        if(flag==1)puts("YES");
        else puts("NO");
        deal(root);
        }
        return 0;
    }
  • 相关阅读:
    04.sys
    leetcode算法-加油站
    Spring动态AOP
    (java反射-JDK动态代理)+CGLIB动态代理
    java反射-基础语法
    leetcode算法-验证回文串
    leetcode算法-盛最多水的容器
    leetcode算法-两数之和
    leetcode算法-三数之和
    leetcode算法-最长和谐子序列
  • 原文地址:https://www.cnblogs.com/a249189046/p/7465573.html
Copyright © 2011-2022 走看看