爆0?!
  • 板块P1363 幻象迷宫
  • 楼主smart_
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/9 22:37
  • 上次更新2024/7/10 09:21:03
查看原帖
爆0?!
542205
smart_楼主2024/7/9 22:37
#include<bits/stdc++.h>
using namespace std;
int N,M;
char s[1510][1510];   //整个地图的规模坐标
bool v[1510][1510];    //现在要与相对坐标对比的 
int fx[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
struct node{
	int x,y;       //实际的坐标 
}p[1510][1510];    //自己以前相对的坐标 
bool tf=false;
void dfs(int x,int y,int mx,int my)
{
	if(tf) return ;
	if(v[mx][my])
	{
		if(p[mx][my].x!=x&&p[mx][my].y!=y)     //判断自己是否围着一个点 
		{
			tf=true;
			return;
			}	else return ;
	}else{
		v[mx][my]=true;
		p[mx][my]={x,y};
	}
	for(int i=0;i<4;i++)
	{
		int tx,ty,mtx,mty;
		tx=x+fx[i][0];
		ty=y+fx[i][1];
		mtx=(mx+fx[i][0])%N;
		mty=(my+fx[i][1])%M;
		if(s[mtx][mty]=='.')
		{
			dfs(tx,ty,mtx,mty);
		}
	}
 } 
int main(){
	while(scanf("%d %d",&N,&M)!=EOF)     //EOF是结尾的意思 
	{
		int x,y;
		for(int i=0;i<N;i++)
		{
			scanf("%s",s[i]);
			for(int j=0;j<M;j++)
			{
				if(s[i][j]=='S'){
					x=i;
					y=j;
					s[i][j]='.';
				}
			}
		}
		memset(v,false,sizeof(v));
		tf=false;
		dfs(x,y,x,y);
		if(tf) printf("Yes\n");
		else printf("No\n");
	}
	return 0;
}

各位大佬帮忙改一下!

2024/7/9 22:37
加载中...