Yes.
//这题多组输入。。首先在输入的时候记录下b字母开头的字符串,接着按b字符串的个数dfs搜索
//搜索时把b字符串的尾字符传入dfs时,查找字符串的头个字符为b开头字符串的尾字符并且未标记,
//直到递归调用尾字符为m时 结束
#include <stdio.h>
#include <string.h>
char s[10000][100]; //记录表
char ss[1000][100]; //b 开头的字符串
bool vis[1000]; //标记
int flag=0; //是否存在
int n;
void dfs(char c)
{
if(c=='m') //尾字符为m时退出
{
flag=1;
return;
}
else
{
for(int i=0;i<n;i++)
{
int len=strlen(s[i]);
if(s[i][0]==c&&!vis[i])
{
vis[i]=1;
dfs(s[i][len-1]);
vis[i]=0;
if(flag) //减少递归调用
return;
}
}
}
}
int main()
{
while(gets(s[0]))
{
int cnt=0;
if(s[0][0]=='b')
strcpy(ss[cnt++],s[n]);
for(n=1;;n++)
{
gets(s[n]);
if(s[n][0]=='b')
strcpy(ss[cnt++],s[n]);
if(strcmp(s[n],"0")==0)
break;
}
for(int i=0;i<cnt;i++)
{
flag=0;
strrev(ss[i]); //倒序字符串
memset(vis,0,sizeof(0));
dfs(ss[i][0]);
if(flag==1)
{
printf("Yes.\n");
break;
}
}
if(flag==0)
printf("No.\n");
}
return 0;
}版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/a73265/article/details/46835451