题意:中文题,不解释了。
思路:DFS。从'b'开始搜,“首尾”的搜索,知道找到'm'。
终于AC了,虽说代码比较搓了,但是也是比较开心啦,呵呵~
#include<iostream>
#include<string>
using namespace std;
char s[200][200];
bool flag1,flag2;
int t;
bool vis[200];
void dfs(int i,char c)
{
int e;
if(flag2) return;
if(i>t) return;
e=strlen(s[i])-1;
if(s[i][e]=='m'&&flag1) {flag2=1;return;}
if(s[i][0]=='b'&&!flag1)
{
flag1=1;
vis[i]=1;
for(int j=0;!vis[j]&&j<t;j++)
{
dfs(j,s[i][e]);
}
flag1=0;
}
if(s[i][0]==c)
{
vis[i]=1;
dfs(i+1,s[i][e]);
vis[i]=0;
}
else dfs(i+1,c);
}
int main()
{
int i;
i=0;
while(scanf("%s",&s[i++])!=EOF)
{
while(s[i-1][0]!='0')
{
scanf("%s",&s[i++]);
}
flag1=flag2=0;
t=i;
memset(vis,0,sizeof(vis));
dfs(0,'b');
if(flag2) printf("Yes.\n");
else printf("No.\n");
i=0;
}
system("pause");
}