poj1181--变形课(BFS)

探讨了哈利波特世界中变形咒语的应用,通过一系列咒语的组合与匹配,实现不同物品之间的转换,特别关注如何将一个球状物转换为一只鼠标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Problem Description
呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一规律:如果咒语是以a开头b结尾的一个单词,那么它的作用就恰好是使A物体变成B物体.
Harry已经将他所会的所有咒语都列成了一个表,他想让你帮忙计算一下他是否能完成老师的作业,将一个B(ball)变成一个M(Mouse),你知道,如果他自己不能完成的话,他就只好向Hermione请教,并且被迫听一大堆好好学习的道理.
 

Input
测试数据有多组。每组有多行,每行一个单词,仅包括小写字母,是Harry所会的所有咒语.数字0表示一组输入结束.
 

Output
如果Harry可以完成他的作业,就输出"Yes.",否则就输出"No."(不要忽略了句号)

 

Sample Input
so
 
 
 
 
 
 
 
 
 
soon river goes them got moon begin big 0
Sample Output
Yes.
 
 
 
 
 
 
 
# include<stdio.h>
# include<string.h>

char queue[1000][100],str[1000][100];

bool use[1000]; 

int k;

int bfs()

{

       int i,len1,len2,head,tail;

       char ch,s1[100];

       head=0;

       tail=1;

       while(head<tail)

       {

              strcpy(s1,queue[head++]);

              len1=strlen(s1);

              ch=s1[len1-1];

              for(i=0;i<k;i++)

              {

                     if(str[i][0]==ch&&use[i]==false)

                     {

                            len2=strlen(str[i]);

                            if(str[i][len2-1]=='m')

                                   return 1;

                            else

                            {

                                   use[i]=true;

                                   strcpy(queue[tail++],str[i]);

                            }

                     }

              }

       }

       return 0;

}

int main()

{

       int i,t;

       char a[100];

       while(gets(a))

       {

              k=0;

              strcpy(str[k++],a);

              t=0;

              while(gets(a),a[0]!='0')

              {

                     use[k]=false;

                     strcpy(str[k++],a);

              }

              for(i=0;i<k;i++)

              {

                     if(str[i][0]=='b'&&use[i]==false)

                     {

                            strcpy(queue[0],str[i]);

                            use[i]=true;

                            t=bfs();

                     }

              }

              if(t)

                     printf("Yes.\n");

              else

                     printf("No.\n");

       }

       return 0;

}

 

 

 

 


Sample Output
Yes.
Hint
Hint
Harry 可以念这个咒语:"big-got-them".
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值