题目 http://acm.hdu.edu.cn/showproblem.php?pid=1181
#include<iostream> #include<cstring> #include<cstdio> using namespace std; char sc[26][26],mark[26]; ///这个地方很巧哦 char a[10000][50]; int flag; void DFS(int x) { if(x==12) {flag=1; return ;} mark[x]=1; for(int j=0;j<26;j++) { if(sc[x][j]&&!mark[j]) { DFS(j); } } } int main() { int i=0; flag=0; while(scanf("%s",a[i])!=EOF) { if(a[i][0]=='0') { DFS(1); ///这个是从b开始哦。 if(flag) { cout<<"Yes."<<endl; } else cout<<"No."<<endl; i=0; memset(a,'0',sizeof(a)); memset(sc,0,sizeof(sc)); memset(mark,0,sizeof(mark)); flag=0; } else { int b1=a[i][0]-'a'; int k=strlen(a[i]); int b2=a[i][k-1]-'a'; sc[b1][b2]=1; i++; } } return 0; }