http://acm.hdu.edu.cn/showproblem.php?pid=1181
一开始忘记 回溯了。。
简单的dfs 只要把每个字符串的第一个和最后一个处理一下 就可以 了
#include<iostream> #include<string.h> #include<cstdio> #include<vector> using namespace std; vector <int> p[30]; char s[1000002]; int flag; void dfs(int n) { int w,i; w=p[n].size(); for(i=0;i<w;i++) { if(p[n][i]=='m'-'a') { flag=1; return ; } dfs(p[n][i]); } } int main() { int i,n,m,j,t,a,b; while(~scanf("%s",s)) { if(strcmp(s,"0")==0) { flag=0; dfs(1); if(flag==1) printf("Yes.\n"); else printf("No.\n"); for(i=0;i<30;i++) p[i].clear(); } else { a=s[0]-'a'; b=strlen(s)-1; p[a].push_back(s[b]-'a'); //printf(" %d\n",s[b]-'a'); } } return 0; }