10分求助
查看原帖
10分求助
141577
yhc12345楼主2022/8/30 11:40
#include<bits/stdc++.h>
using namespace std;
const int N=1510,dx[]={0,-1,0,1,0},dy[]={0,0,1,0,-1};
int n,m;
char a[N][N];
bool vis[N][N],flag;
void dfs(int x,int y,int ax,int ay) {
	if(flag) return;
	if(vis[x][y]) {
		if(x!=ax||y!=ay) flag=true;
		return;
	}
	vis[x][y]=true;
	for(int i=1;i<=4;i++) {
		int nx=(x+dx[i]+n)%n,ny=(y+dy[i]+m)%m;
		int nax=ax+dx[i],nay=ay+dy[i];
		if(a[nx][ny]!='#') dfs(nx,ny,nax,nay);
	}
}
int main() {
	while(~scanf("%d%d",&n,&m)) {
		int x,y;
		for(int i=0;i<n;i++) {
			scanf("%s",a[i]);
			for(int j=0;j<m;j++) {
				if(a[i][j]=='S') {
					x=i;
					y=j;
				}
			}
		}
		flag=false;
		memset(vis,false,sizeof(vis));
		dfs(x,y,x,y);
		if(flag) printf("Yes\n");
		else printf("No\n");
	}
}
2022/8/30 11:40
加载中...