题目连接:变形课
以a开头b结尾的一个单词,可以使A物体变成B物体,问是否能把Ball变成Mouse
DFS:建图,以a开头b结尾的单词就在ab之间连一条边
代码
#include <iostream>
#include <stdio.h>
#include <memory.h>
#include <string.h>
using namespace std;
const int maxl=1005;
char str[maxl];
bool g[26][26];
bool vis[26][26];
bool flag;
void dfs(int u)
{
if(u==12){
flag=true;
return;
}
for(int v=0;v<26;v++){
if(g[u][v]&&!vis[u][v]){
vis[u][v]=true;
dfs(v);
if(flag)return;
vis[u][v]=false;
}
}
}
int main()
{
//freopen("in.txt","r",stdin);
double n;
flag=false;
memset(vis,0,sizeof(vis));
memset(g,0,sizeof(g));
while(scanf("%s",str)!=EOF){
if(!strcmp(str,"0")){
dfs(1);
if(flag)printf("Yes.\n");
else printf("No.\n");
memset(g,0,sizeof(g));
flag=false;
continue;
}
else g[str[0]-'a'][str[strlen(str)-1]-'a']=true;
}
return 0;
}