变形课 HDU1181

简单DFS 数据很水

我处理不好 dfs函数里面的return  干脆弄一个全局变量flag  不清楚不断dfs的话到底算哪个return?

#include<bits/stdc++.h>
using namespace std;

int  m1[1000][1000];
int flag=0;


void dfs(int K)
{
   int f=0;
    for(int i=97;i<=97+26;i++)
    {
        if(m1[K]['m']==1){flag=1;return ;}

        if(m1[K][i]==1){f=1;m1[K][i]=0;dfs(i);}

    }
   if(!f) {return;}


}


int main()
{
       string t;
    while(getline(cin,t),t[0]!=0)
    {   flag=0;
        memset(m1,0,sizeof(m1));
        string s;
        m1[t[0]][t[t.size()-1]]=1;
        for(;;)
        {
            getline(cin,s);
            if(s[0]=='0')break;

            m1[s[0]][s[s.size()-1]]=1;

        }

      dfs(98);

      if(flag)printf("Yes.
");
      else printf("No.
");

    }







    return 0;
}
View Code

改成

  if(m1[K][i]==1){m1[K][i]=0;if(dfs(i))return true;}

  其中的

if(dfs(i))return true;是关键
如果没有这条 当前的dfs就会延续到末尾的false!!!!
一环接一环
原文地址:https://www.cnblogs.com/bxd123/p/10309182.html