hdu 1181 变形课(dfs)

变形课

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)
Total Submission(s): 18477    Accepted Submission(s): 6666


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.
 
Hint
Hint
Harry 可以念这个咒语:"big-got-them".
 

 

Source
 
Recommend
JGShining   |   We have carefully selected several similar problems for you:  1180 1258 1728 1372 1072 
 
 

基础的深搜,一个单词的最后一个字母如果和另一个单词的第一个字母相同,则可以变成这个单词,判断是否能从b变为m,可以将字母转化为数字判断,降低判断难度。

题意:中文题。

附上代码:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 using namespace std;
 5 int ss[26][26],fail;
 6 
 7 void DFS(int k)
 8 {
 9     if(fail)
10         return;
11     if(k=='m'-'a')  //找到m,结束深搜
12     {
13         fail=1;
14         return;
15     }
16     for(int i=0;i<26;i++)  //26个字母顺序开始搜
17     {
18         if(ss[k][i])
19         {
20             ss[k][i]=0;  //搜过的标记为0
21             DFS(i);
22         }
23     }
24 }
25 
26 int main()
27 {
28     char s[50];
29     while(~scanf("%s",s)) //必须多次循环输入
30     {
31         if(s[0]=='0'&&strlen(s)==1)
32             break;
33         memset(ss,0,sizeof(ss));
34         int x,y;
35         x=s[0]-'a';            //将字母转化为数字
36         y=s[strlen(s)-1]-'a';
37         ss[x][y]=1;           //每个单词的第一个字母可以和最后一个字母转换
38         while(~scanf("%s",s))
39         {
40             if(s[0]=='0'&&strlen(s)==1)  //输出0跳出循环
41                 break;
42             x=s[0]-'a';
43             y=s[strlen(s)-1]-'a';
44             ss[x][y]=1;
45         }
46         fail=0;
47         DFS(1);        //从b字母开始搜
48         if(fail) printf("Yes.\n");
49         else printf("No.\n");
50     }
51     return 0;
52 }

 

posted @ 2015-08-25 13:06  lucky_少哖  阅读(177)  评论(0编辑  收藏  举报