您的位置:首页 > 其它

pku1056 IMMEDIATE DECODABILITY

2013-05-18 20:56 267 查看
http://poj.org/problem?id=1056

Trie

有一些字符串,判断是否:这些字符串之间都不是彼此的前缀

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

const int CHARSET = 2, BASE = '1', MAX_NODE = 1001;

int tot, root, child[MAX_NODE][CHARSET];
bool flag[MAX_NODE];

void init()
{
memset(child, 0, sizeof(child));
flag[1] = false;
root = tot = 1;
}

int insert(const char *str)
{
int i, cur, j, flag1 = 0, flag2 = 0;
cur = root;
for(i=0; str[i]; i++)
{
if(child[cur][str[i]-BASE] == 0)
{
if(flag[cur])
{
flag2 = 1;
}
flag1 = 1;
tot = tot + 1;
child[cur][str[i]-BASE] = tot;
memset(child[tot], 0, sizeof(child[tot]));
flag[tot] = false;
}
cur = child[cur][str[i]-BASE];
}
flag[cur] = true;
if(flag1 == 0 || flag2 == 1)
{
return 1;//重复
}
return 0;
}

int main()
{
char s[12] = "\0";
int cases = 1, temp, flag = 0;
init();
while(~scanf("%s", s))
{
if(strcmp(s, "9") == 0)
{
if(flag)
{
printf("Set %d is not immediately decodable\n", cases);
}
else
{
printf("Set %d is immediately decodable\n", cases);
}
cases ++;
flag = 0;
init();
}
else
{
temp = insert(s);
//printf("%d\n", temp);
flag |= temp;
}
memset(s, 0, sizeof(s));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: