题目链接
hdu1181 变形课 dfs
代码如下,解释在代码里面
//可以转换成一个26*26的有向图
//问题就变成了是否能找到从b到m的一条通路,就是[1][12]
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
bool map[26][26];
bool used[26];//最多26个结点
bool dfs(int i)
{
used[1]=true;
for(int j=0;j<26;j++)
{
if(i!=j&&!used[j]&&map[i][j])//代表结点不能是它自己,不能走过而且必须有路
{
if(i!=1)
map[1][j]=true;
used[j]=true;
dfs(j);
}
}
return map[1][12];
}
//解释一下,比如输入的是ab,那么map[a][b]=1就相当于连通了
//只不过要转换一下,转成数字
int main()
{
char road[103];
while(cin>>road)
{
if(road[0]!='0')//题目中给了要是0的话就停止
{
int len=strlen(road);
map[road[0]-'a'][road[len-1]-'a']=true;//表示联通了
continue;
}
if(dfs(1))
printf("Yes.\n");
else
printf("No.\n");
memset(map,false,sizeof(map));
memset(used,false,sizeof(used));
}
}