求助,必关
查看原帖
求助,必关
805617
zby0501_楼主2024/7/27 16:40
#include <bits/stdc++.h>
using namespace std;
int m,n,sx,sy,flag;
struct point{
	int x,y;
};
char grid[1510][1510];
int dx[]={-1,0,0,1},dy[]={0,-1,1,0};
int vis[1510][1510];
point vis2[1510][1510];
void dfs(int modx,int mody,int x,int y){
	if(flag) return;
	if(vis[modx][mody] && (vis2[modx][mody].x!=x || vis2[modx][mody].y!=y)){
		flag=1;
		return;
	}
	vis[modx][mody]=1;
	vis2[modx][mody].x=x;
	vis2[modx][mody].y=y;
	for(int k=0;k<4;++k){
		int newmodx=(modx+dx[k]+m)%m,newmody=(mody+dy[k]+n)%n;
		int newx=x+dx[k],newy=y+dy[k];
		if(grid[newmodx][newmody]!='#'){
			if(!vis[newmodx][newmody] || vis2[newmodx][newmody].x!=newx || vis2[newmodx][newmody].y!=newy)
				dfs(newmodx,newmody,newx,newy);
		}
	}
}
int main() {
	//freopen("a.in","r",stdin);
	//freopen("b.in","w",stdout);
	while(cin>>m>>n){
		memset(vis,0,sizeof vis);
		memset(vis2,0,sizeof vis2);
		flag=0;
		for(int i=0;i<m;++i)
			cin>>grid[i];
		for(int i=0;i<m;++i){
			for(int j=0;j<n;++j){
				if(grid[i][j]!='S')
					sx=i,sy=j;
			}
		}
		dfs(sx,sy,sx,sy);
		if(flag) cout<<"Yes\n";
		else cout<<"No\n";
	}
	return 0;
}

错误数据:

12 12
######.#.#.#
######.#...#
.......####.
######.####.
............
############
.....#...S..
####.#.#####
.....#......
############
.........#..
########.#.#

NO

2024/7/27 16:40
加载中...