10分啊啊啊?
查看原帖
10分啊啊啊?
658786
STUDENT00楼主2022/11/5 12:33
#include<bits/stdc++.h>
#define N 1500
using namespace std;
int n,m,dx[]={0,0,1,-1},dy[]={1,-1,0,0};
char c[2*N][N];
bool vis[2*N][N];
struct node{
	int x,y;
};
queue<node> q;
void clear(){
	queue<node> empty;
	swap(q,empty);
}
int main(){
	while(~scanf("%d%d",&n,&m)){
		for(int i=0;i<n;i++) scanf("%s",c[i]);
		int sx,sy;
		for(int i=0;i<n;i++){
			for(int j=0;j<m;j++){
				if(c[i][j]=='S'){
					sx=i;
					sy=j;
					break;
				}
			}
		}
		for(int i=0;i<n;i++){
			for(int j=0;j<m;j++){
				if(c[i][j]=='S') c[i+n][j]='.';
				else c[i+n][j]=c[i][j];
			}
		}
		memset(vis,0,sizeof(vis));
		q.push({sx,sy});
		vis[sx][sy]=1;
		bool flag=0;
		while(!q.empty()){
			node now=q.front();
			q.pop();
			for(int i=0;i<4;i++){
				int nx=now.x+dx[i],ny=now.y+dy[i];
				if(nx<0||nx>=2*n||ny<0||ny>=m) continue;
				if(nx==sx+n&&ny==sy){
					flag=1;
					clear();
					break;
				}
				if(c[nx][ny]=='#'||vis[nx][ny]) continue;
				vis[nx][ny]=1;
				q.push({nx,ny});
			}
		}
		if(flag) printf("Yes\n");
		else printf("No\n");
	}
	return 0;
}
2022/11/5 12:33
加载中...