这题我的思路是。。把字符串转换为矩阵。。
然后我写dfs时。。有个条件。。if ( i == 'm' -a') return 1;
最后老是错误。。
深搜是有很多层。。调用了很多次函数。。 return 1只会结束当前调用的函数。。
写有返回值的递归函数要小心啊。
最后改成 void 型。。
AC 了。。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int map[1001][1001];
int hash[1001][1001];
const int inf = 0x7f7f7f7f;
void DFS(int a, int &ans)
{
int i;
for(i = 0; i < 26; i++)
if (map[a][i] == 1 && !hash[a][i]) {
if (i == 'm' - 'a')
{
ans= 1;
return;
}
hash[a][i] = 1;
DFS(i, ans);
hash[a][i] = 0;
}
}
int main( )
{
char ch[140];
int i, j, k, len;
while(scanf("%s", ch) != EOF)
{
int ans= 0;
if (ch[0] == '0')
break;
for(i = 0; i <= 1000; i++)
for( j = 0; j <= 1000; j++)
map[i][j] = inf, hash[i][j] = 0;
for(; ; )
{
len = strlen(ch);
i = ch[0] - 'a';
j = ch[len -1] - 'a';
map[i][j] = 1;
scanf("%s", ch);
if (ch[0] =='0')
break;
}
DFS( 1, ans );
if ( ans )
puts("Yes.");
else
puts("No.");
}
return 0;
}