变形课
Problem Description
呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一规律:如果咒语是以a开头b结尾的一个单词,那么它的作用就恰好是使A物体变成B物体.
Harry已经将他所会的所有咒语都列成了一个表,他想让你帮忙计算一下他是否能完成老师的作业,将一个B(ball)变成一个M(Mouse),你知道,如果他自己不能完成的话,他就只好向Hermione请教,并且被迫听一大堆好好学习的道理.
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.
[hint]Hint[/hint] Harry 可以念这个咒语:"big-got-them".
1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 5 bool flag; 6 int n; 7 int used[1005]; 8 9 struct node 10 { 11 char s[10]; 12 }s[1005]; 13 14 void dfs(int cur) 15 { 16 if(flag) 17 return; 18 int len=strlen(s[cur].s); 19 if(s[cur].s[len-1]=='m') 20 { 21 flag=true; 22 return; 23 } 24 for(int i=0;i<n;i++) 25 { 26 if(!used[i]&&s[i].s[0]==s[cur].s[len-1]) 27 { 28 used[i]=1; 29 dfs(i); 30 used[i]=0; 31 } 32 } 33 } 34 35 int main() 36 { 37 char temp[10]; 38 int i,j; 39 flag=i=0; 40 memset(used,0,sizeof(used)); 41 while(scanf("%s",temp)!=EOF) 42 { 43 if(temp[0]=='0') 44 { 45 n=i; 46 for(j=0;j<n;j++) 47 { 48 if(s[j].s[0]=='b') 49 dfs(j); 50 if(flag==true) 51 break; 52 } 53 if(flag) 54 printf("Yes. "); 55 else 56 printf("No. "); 57 flag=false; 58 i=0; 59 memset(used,0,sizeof(used)); 60 } 61 else 62 strcpy(s[i++].s,temp); 63 } 64 }