这道题类似成语接龙。题意懂了,方法很简单,就是从开头是”b“的字母寻找下去,并判断最后一个字母是否为'm'如果找的到就退去,很明显就是个递归(DFS)就可以实现了。
#include<stdio.h>
#include<string.h>
char a[100][20];
int visit[100];
int flag ,n;
void DFS(int x)
{
int k=strlen(a[x]);
char *st;
st=&a[x][k-1];
if(a[x][k-1]=='m')
{
flag=1;
return;
}
for(int j=0;j<n;j++)
if(a[j][0]==*st &&visit[j]==0)
{
visit[j]=1;
DFS(j);
}
}
int main()
{
while(scanf("%s",a[0])!=EOF)
{
n=1;
while(scanf("%s",a[n++]),a[n-1][0]!='0');
flag=0;
memset(visit,0,sizeof(visit));
for(int i=0;i<n;i++)
if(a[i][0]=='b')
{
DFS(i);
if(flag==1)
break;
}
if(flag==1)
printf("Yes.\n");
else
printf("No.\n");
}
return 0;
}
/*
got
bit
they
yes
string
then
bith
her
room
0
them
tiget
0
*/