Posted on 2010-03-05 13:24
Uriel 阅读(357)
评论(0) 编辑 收藏 引用 所属分类:
POJ 、
搜索
简单的BFS,不过输入有点搞。。见Discuss可知数据可能有循环。。
一开始用scanf %s 读入怎么都错。。改成%c读入就过了。。不知道什么原因。。也许是句子里也能有连续一个以上空格?

/**//*
Problem: 2023 User: Uriel
Memory: 200K Time: 0MS
Language: C++ Result: Accepted
*/

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

struct node


{
int cnt;
int c[2];
char k;
char str[10];
char word[300];
};

node P[110];
int cse,t,n,l,r,flag;
int vis[110],que[110],res[110];

int main()


{
// freopen("out.txt","w",stdout);
int i,j,k;
scanf("%d",&cse);
t=1;
while(cse--)

{
memset(P,0,sizeof(P));
memset(que,0,sizeof(que));
scanf("%d",&n);
for(i=1;i<=n;i++)

{
getchar();
P[i].k=getchar();
getchar();
k=0;
if(P[i].k=='C')

{
getchar();
for(j=0;;j++)

{
P[i].word[j]=getchar();
if(P[i].word[j]=='\"')break;
}
scanf("%d %d",&P[i].c[0],&P[i].c[1]);
}
else

{
getchar();
for(j=0;;j++)

{
P[i].word[j]=getchar();
if(P[i].word[j]=='\"')break;
}
scanf("%s",P[i].str);
}
}
l=0;
r=1;
flag=0;
que[1]=1;
memset(vis,0,sizeof(vis));
vis[1]=0;
while(l!=r && !flag)

{
l++;
if(P[que[l]].k=='C')

{
int tmp1=P[que[l]].c[0];
int tmp2=P[que[l]].c[1];
if(!vis[tmp1])

{
que[++r]=tmp1;
vis[tmp1]=que[l];
}
if(!vis[tmp2])

{
que[++r]=tmp2;
vis[tmp2]=que[l];
}
}
else

{
if(strcmp(P[que[l]].str,"HAPPY")==0)flag=1;
}
}
printf("STORY %d\n",t++);
k=0;
while(que[l])

{
res[++k]=que[l];
que[l]=vis[que[l]];
}
for(i=k;i>=1;i--)

{
for(j=0;;j++)

{
if(P[res[i]].word[j]=='\"')break;
else
printf("%c",P[res[i]].word[j]);
}
printf("\n");
}
}
system("PAUSE");
return 0;
}
