觉得浮夸了四年,漠然发现原来是浮躁了四年!

hdu 1181 (DFS 入门)

problem link adress:   http://acm.hdu.edu.cn/showproblem.php?pid=1181

给一列单词序列,如果你能找出一个单词以‘b’开始,并且联系到一个单词以‘m’开始,就输出“Yes.”;

一个单词联系到下一个单词的条件是:本单词的结尾的字符是下一个单词的第一个字符。

View Code
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 using namespace std;
 5 struct node{
 6     char s,e;
 7 }s[1000];
 8 int k;
 9 int flag;
10 int mark[1000];
11 int judge;
12 bool DFS(char c)
13 {
14     if(flag==1)/*if  flag=1, that means we have found it.we needn't continue*/
15         return true;
16     if(c=='m')
17     {
18         flag=1;
19         return true;
20     }
21     int i;
22     for(i=0;i<k;i++)
23     {
24         if(!mark[i]&&s[i].s==c)
25         {
26             mark[i]=1;
27             DFS(s[i].e);
28             mark[i]=0;
29         }
30     }
31     return false;
32 }
33 int main()
34 {
35     char in[100];
36     while(gets(in))
37     {
38         k=0;
39         judge=0;
40         while(in[0]!='0')
41         {
42             s[k].s=in[0];
43             s[k].e=in[strlen(in)-1];
44             k++;
45             if(in[0]=='b')  judge++;
46             if(in[0]=='m')  judge++;
47                 gets(in);
48         }
49         if(judge<2)  
50         { printf("No.\n");
51           continue;
52         }
53         flag=0;
54         memset(mark,0,sizeof(mark));
55         DFS('b');
56         if(flag)
57             printf("Yes.\n");
58         else
59             printf("No.\n");
60     }
61     return 0;
62 }
63 
64     

 

 

posted @ 2013-04-18 20:41  heat nan  阅读(189)  评论(0)    收藏  举报