/*Immediate Decodability 煎熬了三天, 终于AC了
runtime error了好多次,究其原因,数组开得太小。
这道题在POJ上也有,但是POJ的测试数据比较水,所以一提交就通过了,而UVA上的测试数据很严格。
自己编了19组数据才找到错误之处,原来是冒泡排序写错了!太失败了!!!!*/
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define LOCAL
typedef struct node{
int flag;
struct node *lchild,*rchild;
}BTree;
void CreatBTree(BTree &T)
{
T.flag=0;
T.lchild=NULL;
T.rchild=NULL;
}
void InsertNode(BTree *&p,char value)
{
BTree *q;
if(value=='0')
{
q=(BTree *)malloc(sizeof(BTree));
p->lchild=q;
p=q;
q->flag=0;
q->lchild=NULL;
q->rchild=NULL;
}
if(value=='1')
{
q=(BTree *)malloc(sizeof(BTree));
p->rchild=q;
p=q;
p->flag=0;
p->lchild=NULL;
p->rchild=NULL;
}
}
int FindNode(char value,BTree *&q)
{
if(value=='0'&&q->lchild)
{
q=q->lchild;
return 1;
}
if(value=='1'&&q->rchild)
{
q=q->rchild;
return 1;
}
return 0;
}
int GiveValue(BTree T,char n[],int len)
{
int i;
BTree *q;
q=&T;
for(i=0;i<len&&!q->flag;i++)
{
if(n[i]=='1')q=q->rchild;
if(n[i]=='0')q=q->lchild;
}
if(i==len)
{
q->flag=1;
return 1;
}
else return 0;
}
void Delete(BTree &T)
{
BTree *q,*p;
q=&T;
while(q->lchild)
{
p=q->lchild;
free(q);
q=p->lchild;
}
while(q->rchild)
{
p=q->rchild;
free(q);
q=p->rchild;
}
}
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
freopen("o.txt","w",stdout);
#endif
BTree T,*q,R;
int i,j,k,mess,set=0,find,sav=0,conse[20];
bool flag=false;
char c[15],save[20][15];
CreatBTree(T);
R=T;
q=&T;
while(gets(c)!=0)
{
if(c[0]!='9')
{
strcpy(save[sav++],c);
}
if(c[0]=='9')
{
for(i=0;i<sav;i++)
{
conse[i]=strlen(save[i]);
}
for(i=0;i<sav;i++)
{
for(j=0;j<sav-1;j++)
{
if(conse[j]>conse[j+1])
{
k=conse[j+1];
conse[j+1]=conse[j];
conse[j]=k;
}
}
}
for(i=0;i<sav;i++)
{
for(j=0;j<sav;j++)
{
if(strlen(save[j])==conse[i])
{
q=&T;
for(k=0;k<strlen(save[j]);k++)
{
find=FindNode(save[j][k],q);
if(!find)InsertNode(q,save[j][k]);
}
mess=GiveValue(T,save[j],strlen(save[j]));
if(!mess)flag=true;
save[j][0]='\0';
}
}
}
set++;
if(flag)
{
printf("Set %d is not immediately decodable\n",set);
}
else
{
printf("Set %d is immediately decodable\n",set);
}
flag=false;
Delete(R);
CreatBTree(T);
sav=0;
q=&T;
}
}
return 0;
}
UVA - 644 - Immediate Decodability
最新推荐文章于 2020-10-19 15:29:56 发布