hdu 1181 (DFS 入门)

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

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

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

hdu 1181 (DFS 入门) 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     

 

 

你可能感兴趣的:(HDU)