pku 1056 IMMEDIATE DECODABILITY

#include <stdio.h>
#include <string.h>

#define MAXTSIZE 100000
#define MAXLEN 11

typedef struct TNode
{
    TNode()
    {
        end=false;
        memset(next,0,sizeof(next));
    }
    bool end;
    TNode *next[2];
}*Trie;

TNode node[MAXTSIZE];
int index;

bool insert(Trie T,char *str)
{
    while(*str)
    {
        if( T->end == true ) return false;
        int i=*str-'0';
        if(!T->next[i]) T->next[i]=node+index++;
        T=T->next[i];
        str++;
    }
        if(T->next[0] || T->next[1]) return false;
    T->end=true;
    return true;
}

int main()
{
    int n,cas=1;
    char code[MAXLEN];
    while(scanf("%s",code)!=EOF)
    {
        index=0;
        Trie tree=node+index++;
        bool ok=true;
        do
        {
            if(ok)
            {
                ok=insert(tree,code);
            }
            scanf("%s",code);
        }while(code[0]!='9');

        if(ok) printf("Set %d is immediately decodable\n",cas++);
        else printf("Set %d is not immediately decodable\n",cas++);

        for(n=0; n<=index; n++)
        {
            node[n].end=false;
            memset(node[n].next,0,sizeof(node[n].next));
        }
    }
    return 0;
}

 

posted @ 2010-08-25 20:25  菜到不得鸟  阅读(178)  评论(0)    收藏  举报