HDU 1181 变形课(DFS)

变形课

            Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)

                   Total Submission(s): 9165    Accepted Submission(s): 3415

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
Harry 可以念这个咒语:"big-got-them".
 
 
 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 const int MAX_NUM = 105;  
 5 const int MAX_LEN = 105;
 6 char  word[MAX_NUM][3];
 7 int   visit[MAX_NUM];         //标记该字符串是否访问,防止陷入循环
 8 int   wordCount;              //记录单词的个数
 9 bool  bResult;                //判断结果
10 
11 void FormatString(char str[]) //取字符串第一个和最后一个字符
12 {
13     int length = strlen(str);
14     word[wordCount][0] = str[0];
15     word[wordCount][1] = str[length-1];
16     word[wordCount][2] = '\0';
17     wordCount++;
18 }
19 
20 void dfs(char ch)
21 {
22     if(bResult)return ;
23     if(ch == 'm')
24     {
25         bResult = true;
26         return ;
27     }
28 
29     for(int k = 0; k < wordCount; k++)
30     {
31         if(visit[k] == 0 && ch == word[k][0])
32         {
33             visit[k] = 1;
34             dfs(word[k][1]);
35             visit[k] = 0;
36         }        
37     }
38 }
39 
40 int main()
41 {
42     char strTemp[MAX_LEN];
43     while(scanf("%s", strTemp) != EOF)
44     {
45         bResult = false;
46         wordCount = 0;
47         memset(visit, 0, sizeof(visit));
48 
49         FormatString(strTemp);
50         while(true)
51         {
52             scanf("%s", strTemp);
53             if(strTemp[0] == '0')break;
54             FormatString(strTemp);
55         }
56 
57         dfs('b'); //从字符'b'开始搜索
58         if(bResult)
59             printf("Yes.\n");
60         else
61             printf("No.\n");
62     }
63     return 0;
64 }
原文地址:https://www.cnblogs.com/Dreamcaihao/p/3108787.html