#include"iostream" using namespace std; char s[100]; char S[100],E[100]; int i=0,j; int used[1000]; int sign=0,mark=0; void dfs(int x) { if(E[x]=='m') { cout<<"Yes."<<endl; sign=1; mark=1; } //sign标志已经找到尾“m”,mark表示找到'm'的情况:如果找到则mark=1,否则mark=0; else { for(int p=0; p<i; p++) if(S[p]==E[x]) // 尾和首是否相等 (1)used[p]判断S[p]是否用过,以p为标志 { if(used[p]==1) continue; else { used[p]=1; dfs(p); if(mark==1) break; } } } } int main() { int n; while(scanf("%s",s)!=EOF) { memset(used,0,sizeof(used)); mark=0; sign=0; if(s[0]!='0') //将s[]首尾字母存入S[],E[],即比较首尾字母即可 { S[i]=s[0]; E[i]=s[strlen(s)-1]; i++; } if(s[0]=='0') { int flag=0; for(j=0; j<i; j++) { if(S[j]=='b') { used[j]=1; // used[]判断是否用过0 没用过;1用过 dfs(j); if(sign==1) break; //sign==1时,标志找到“m” ,并且跳出 } else flag++; //判断没b的情况 } if(flag==i||mark==0) cout<<"No."<<endl; //mark==0表示没找到'm' ,flag==i表示'b'不存在 i=0; //运算完后从新初始化i } } return 0; }
http://acm.hdu.edu.cn/showproblem.php?pid=1181
dfs!