简单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; }
改成
if(m1[K][i]==1){m1[K][i]=0;if(dfs(i))return true;}
其中的
if(dfs(i))return true;是关键
如果没有这条 当前的dfs就会延续到末尾的false!!!!
一环接一环