Fox And Two Dots CodeForces - 510B(dfs判环)

说一个坑点:对于bool类型的dfs,有两种情况都是返回true的,一是这一层dfs中符合要求返回true,而是接下来的某层(dfs函数)符合要求返回true,二者缺一不可(在这个地方WA了好久,啊啊啊啊啊啊啊!!!!!!!!!!)

AC代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
//#define int long long
const int maxn=1e6+5;
typedef long long ll;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
char ch[100][100];
int n,m,vis[100][100];
bool dfs(int x,int y,int fx,int fy,char c){
	vis[x][y]=1;
	for(int i=0;i<4;i++){
		int nx=x+dx[i];
		int ny=y+dy[i];
		if(nx==fx&&ny==fy)continue;
		if(nx<1||nx>n||ny<1||ny>m||ch[nx][ny]!=c)continue;
		if(vis[nx][ny])return true;
		if(dfs(nx,ny,x,y,c))return true;//没有这一步会WA!!!!!!!!! 
	}
	return false;
}
int main() {
	cin>>n>>m;
	for(int i=1; i<=n; i++)
		for(int j=1; j<=m; j++)cin>>ch[i][j];
	int flag=0;
	for(int i=1; i<=n; i++)
		for(int j=1; j<=m; j++)
			if(!vis[i][j]) {
				if(dfs(i,j,-1,-1,ch[i][j])) {flag=1;break;}
			}
	if(flag)cout<<"Yes"<<endl;
	else cout<<"No"<<endl;
}

猜你喜欢

转载自blog.csdn.net/Alanrookie/article/details/107282999
Fox