使用深度优先搜索解决,很简单的题。
建立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;
}
原文地址:http://blog.csdn.net/a809146548/article/details/44262387