使用深度优先搜索解决,很简单的题。
建立26个字母的邻接矩阵图和访问数组,从字母b开始搜索,若能到达字母m则可以变形。
#include<iostream> using namespace std; int v[27]; int m[27][27]; bool dfs(int x) { if(x=='m'-'a') //搜到字母m结束 return true; for(int i=0;i<26;i++) { if(m[x][i]==1 && !v[i]) { v[i]=1; if(dfs(i)) return true; //搜到(到达)就结束 v[i]=0; } } return false; } int main() { char a[101]; while(scanf("%s",a)==1 && a[0]!='0') { m[a[0]-'a'][a[strlen(a)-1]-'a']=1; while(scanf("%s",a)==1 && a[0]!='0') m[a[0]-'a'][a[strlen(a)-1]-'a']=1; if(dfs('b'-'a')) //从字母b开始搜索 cout<<"Yes."<<endl; else cout<<"No."<<endl; } return 0; }
时间: 2024-10-12 21:43:35