1-04D. 膨胀的tyx
题目描述
由于tyx抱过了这么多大腿,他变得越来越棒棒了,一般的迷宫根本拦不住他。为了治一治他,你决定为他单独定制一款无限迷宫。
所谓无限迷宫是指,由一个 的迷宫单元经过无限平铺得到的迷宫,即将无数份迷宫单元平铺在一个二维平面上。定制好以后,你将tyx扔到了迷宫里,不妨假定tyx落在了起点处。
出于对无限迷宫的恐惧,tyx想要尽可能逃离这里。那么问题来了,tyx能不能逃到距离起点无限远的地方去呢?
输入格式
第一行两个整数 ,用来描述迷宫单元的尺寸。
接下来是一个 的字符矩阵,用来描述这个迷宫,每个字符一定属于以下三种:
-
字符
'.'
代表这个点是空地。 -
字符
'S'
代表这个点是起点。 -
字符
'#'
代表这个点是墙,不可以走。
输出格式
输出一行一个字符串“Yes”或“No”(不包括引号),“Yes”表示tyx可以逃到无限远的地方,“No”表示不可以。
样例
样例输入1
3 3
#.#
#.#
#S#
样例输出1
Yes
样例输入2
5 5
#.#.#
..#.S
#####
..#..
#.#.#
样例输出2
No
c++AC代码
#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,b[2005][2005][5];
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
char a[2005][2005];
bool vis[2005][2005];
struct node{
int x,y,ex,ey;
}t1,t2;
inline void bfs(int x,int y){
queue<node> q;
t1.x=t1.ex=b[x][y][0]=x,t1.y=t1.ey=b[x][y][1]=y;
q.push(t1);
while(!q.empty()){
t1=q.front();
q.pop();
for(int i=0;i<=3;i++){
int dx=t1.x+dir[i][0],dy=t1.y+dir[i][1];
int tx=t1.ex+dir[i][0],ty=t1.ey+dir[i][1];
if(dx==n+1)dx=1;
if(dx==0