爆栈。不过证明自己会写了。找到解决办法了。上万的数据用DFS一般都会爆栈,所以需要做的是先打表,把26个字母的双排列都找出来,然后把输入单词的首尾确定,重复的合并,数据最大就只有676了。
#include <cstdio>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
char Lu[10001][3];
char Yi[10000];
int num, flag;
void dfs(char *a)
{
if (a[2] == 'm'){
printf("Yes.\n");
flag = 0;
return ;
}
for (int i = 1; i < num; i++)
if (Lu[i][1] == a[2])
dfs(Lu[i]);
return ;
}
int main(){
while (cin >> Yi && EOF){
if (Yi == "0"){
printf("No.\n");
continue;
}
Lu[1][1] = Yi[0];
Lu[1][2] = Yi[sizeof(Yi) - 1];
for (int i = 2; Yi != "0"; i++){
cin >> Yi;
int w = sizeof(Yi) - 1;
Lu[i][1] = Yi[0];
Lu[i][2] = Yi[w];
num = i;
}
flag = 1;
for (int i = 1; i < num; i++){
if (Lu[i][1] == 'b')
dfs(Lu[i]);
if (flag == 0)
break;
}
if (flag)
printf("No.\n");
}
return 0;
}