求助 10 分
查看原帖
求助 10 分
793625
Pink_Cut_Tree楼主2024/7/12 15:00
#include<bits/stdc++.h>
using namespace std;
const int N=1505;
int n,m;
char ch;
int vis[N][N];
int sx,sy;
int dx[]={0,-1,0,1},dy[]={1,0,-1,0};
bool flag;
map<pair<int,int>,bool>ds;
void dfs(int x,int y,int pre_x,int pre_y){
	if(flag){
		return;
	}
	vis[x][y]=2;
	for(int i=0;i<4;i++){
		int px=x+dx[i]+m,py=y+dy[i]+n; ds[{px,py}]=1;
		px%=m,py%=n;
		if(px<0||px>m||py<0||py>n||vis[px][py]==1||px==pre_x&&py==pre_y){
			continue;
		}
		if(vis[px][py]==2){
			if(ds[{px,py}]){
				flag=1; cout<<"Yes\n";
			}
			return;
		}
		dfs(px,py,x,y);
	}
}
int main(){
	cin.tie(0)->sync_with_stdio(0);
	while(cin>>m>>n){
		memset(vis,0,sizeof vis); flag=0;
		for(int i=0;i<m;i++){
			for(int j=0;j<n;j++){
				cin>>ch;
				if(ch=='#'){
					vis[i][j]=1;
				}
				else if(ch=='S'){
					sx=i,sy=j;
				}
			}
		}
		if(n==1&&m==1){
			cout<<"Yes\n"; continue;
		}
		dfs(sx,sy,sx,sy);
		if(flag==0){
			cout<<"No\n";
		}
	}
return 0;
}
2024/7/12 15:00
加载中...