【ACM】杭電OJ 1181
阿新 • • 發佈:2018-11-08
http://acm.hdu.edu.cn/showproblem.php?pid=1181
DFS搜尋(遞迴函式)
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cstdlib> using namespace std; char s[1000]; int k,flag; int vis[1000]; struct { char begin,end; }no[100]; void dfs(char s) { int i; if(s == 'm') { flag = 1; return; } for(i = 0;i < k;i++) { if((no[i].begin == s)&&(vis[i]!=1)) { vis[i] = 1; dfs(no[i].end); } } } int main () { int i; while(scanf("%s",s)!=EOF) { k = 0; if(!strcmp(s,"0")) continue; no[k].begin = s[0]; no[k++].end = s[strlen(s)-1]; while(scanf("%s",s)!=EOF) { if(!strcmp(s,"0")) break; no[k].begin = s[0]; no[k++].end = s[strlen(s)-1]; } flag = 0; for(i=0;i<k;i++) { memset(vis,0,sizeof(vis)); if(no[i].begin=='b') { vis[i] = 1; dfs(no[i].end); } if(flag) break; } if(flag) cout<<"Yes."<<endl; else cout<<"No."<<endl; } return 0; }