最近在做一些简单的搜索题。这题算是解决的比较快的吧,也比较简单,主要是把题目的数据处理一下,就会发现这是一道非常典型的深搜。。。
贴我的代码,希望与大家交流交流。。。
#include<cstdio>
#include<cstring>
using namespace std;
int ok;
int m[26][26],vis[26][26];
void dfs(int x)
{
if(ok) return ;
for(int i=0;i<26;i++)
{
if(m[x][i]&&vis[x][i]==0)
{
vis[x][i]=1;
if(i=='m'-'a')
{
ok=1;return;
}
dfs(i);
vis[x][i]=0;
}
}
}
int main()
{
//freopen("a.txt","r",stdin);
char s[100];
memset(m,0,sizeof(m));
memset(m,0,sizeof(vis));
ok=0;
int x,y,xflag=0,yflag=0; //xflag yflag 标记是否有b的开头和m的结尾
while(scanf("%s",s)==1)
{
if(strcmp(s,"0")==0)
{
if(xflag&&yflag)
dfs(1);
else ok=0;
if(ok) printf("Yes.\n");
else printf("No.\n");
xflag=0;yflag=0;
ok=0;
memset(m,0,sizeof(m));
memset(vis,0,sizeof(vis));
}
else
{
x=s[0]-'a';if(x==1) xflag=1;
y=s[strlen(s)-1]-'a';if(y=='m'-'a') yflag=1;
if(x!=y)
m[x][y]=1;
}
}
return 0;
}
浙公网安备 33010602011771号