静态字典树(模拟动态的)

<pre name="code" class="cpp">静态字典树,其实质是模拟实现动态字典树的
#include<cstdio>
#include<cstring>
#include<cstdlib>
const int Max=10;
using namespace std;
struct trie
{
    int next[Max];
    int flag;
}node[100000];
int num;
bool insert(char * str)
{
    int i,len,tem,p;
    p=0;
    len=strlen(str);
    for(i=0;i<len;i++)
   {
        tem=str[i]-'0';
        if(node[p].next[tem]!=-1)
		{
            p=node[p].next[tem];
            if(i==len-1)
                return 1;
            if(node[p].flag==1)
                return 1;
        }// 已插入过字符的处理,更具实际的情况写返回条件
        else
        {// 这是真正的插入字符
            node[p].next[tem]=++num;
            p=num;
        }
        if(i==len-1)
            node[p].flag=1;// 记录单词的最后一个字符
    }
    return 0;
}
int main()
{
    int T,n,i;
    char s[15];
    bool yes;
    scanf("%d",&T);
    while(T --)
    {
        scanf("%d",&n);
        memset(node,-1,sizeof(node));     ///初始化莫忘
        yes=0;
        num=0;
        for(i=0;i<n;i++)
        {
            scanf("%s",s);
            if(yes==0)
                if(insert(s))
                    yes=1;
        }
        if(yes==0)
            printf("YES\n");
        else
            printf("NO\n");
    }
}
// 注意写静态内存方式的trie树时不要乱写指针,我就悲剧的调试好久没有结果


 

你可能感兴趣的:(C++,静态字典树)