最近在做一些简单的搜索题。这题算是解决的比较快的吧,也比较简单,主要是把题目的数据处理一下,就会发现这是一道非常典型的深搜。。。

贴我的代码,希望与大家交流交流。。。

#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;
}

posted on 2012-02-09 19:03  fakeAcmer  阅读(576)  评论(0)    收藏  举报