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