您的位置:首页 > 其它

【杭电1181】变形课

2016-07-28 21:13 239 查看
变形课Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d& %I64uSubmit StatusDescription呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一规律:如果咒语是以a开头b结尾的一个单词,那么它的作用就恰好是使A物体变成B物体. Harry已经将他所会的所有咒语都列成了一个表,他想让你帮忙计算一下他是否能完成老师的作业,将一个B(ball)变成一个M(Mouse),你知道,如果他自己不能完成的话,他就只好向Hermione请教,并且被迫听一大堆好好学习的道理.  Input测试数据有多组。每组有多行,每行一个单词,仅包括小写字母,是Harry所会的所有咒语.数字0表示一组输入结束.  Output如果Harry可以完成他的作业,就输出"Yes.",否则就输出"No."(不要忽略了句号)  Sample Input
sosoonrivergoesthemgotmoonbeginbig0 Sample Output
Yes.Hint
Hint  Harry 可以念这个咒语:"big-got-them".
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct{char x,y;}a[10000];int vis[10000],flag,k,l;char s[10000];void dfs(int cur){if(a[cur].y=='m'){1447fflag=1;return;}else{int i;for(i=0;i<k;i++){if(!vis[i]&&a[cur].y==a[i].x) //如果该单词末字母不是m,那么连接一个首字母与他的末字母相同的单词,//并再次判断这个字母的末字母是否是m{vis[i]=1;  //标记为搜索过的单词dfs(i);vis[i]=0;  //还原为没有标记的,方便判断下一组单词;}}}}int main(){while(scanf("%s",s)!=EOF)  {if(s[0]=='0')  //每组的第一个单词{printf("No\n");continue;}k=1; flag=0;l=strlen(s);a[0].x=s[0];a[0].y=s[l-1];while(scanf("%s",s)!=EOF)  {if(s[0]=='0')break;int l=strlen(s);a[k].x=s[0];  //记录首末字母a[k].y=s[l-1];k++;  //记录单词个数}int i;for(i=0;i<k;i++){if(a[i].x=='b'){memset(vis,0,sizeof(vis));vis[i]=1;dfs(i);}if(flag)break;}printf("%s\n",flag?"Yes.":"No.");}return 0;}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: