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