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     

 

 

转载于:https://www.cnblogs.com/heat-man/archive/2013/04/18/3029410.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值