Infinite Maze
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

We've got a rectangular n × m-cell maze. Each cell is either passable, or is a wall (impassable). A little boy found the maze and cyclically tiled a plane with it so that the plane became an infinite maze. Now on this plane cell (x, y) is a wall if and only if cell  is a wall.

In this problem  is a remainder of dividing number a by number b.

The little boy stood at some cell on the plane and he wondered whether he can walk infinitely far away from his starting position. From cell (x, y) he can go to one of the following cells: (x, y - 1), (x, y + 1), (x - 1, y) and (x + 1, y), provided that the cell he goes to is not a wall.

Input

The first line contains two space-separated integers n and m (1 ≤ n, m ≤ 1500) — the height and the width of the maze that the boy used to cyclically tile the plane.

Each of the next n lines contains m characters — the description of the labyrinth. Each character is either a "#", that marks a wall, a ".", that marks a passable cell, or an "S", that marks the little boy's starting point.

The starting point is a passable cell. It is guaranteed that character "S" occurs exactly once in the input.

Output

Print "Yes" (without the quotes), if the little boy can walk infinitely far from the starting point. Otherwise, print "No" (without the quotes).

Examples
input

Copy
5 4
##.#
##S#
#..#
#.##
#..#
output

Copy
Yes
input

Copy
5 4
##.#
##S#
#..#
..#.
#.##
output

Copy
No
Note

In the first sample the little boy can go up for infinitely long as there is a "clear path" that goes vertically. He just needs to repeat the following steps infinitely: up, up, left, up, up, right, up.

In the second sample the vertical path is blocked. The path to the left doesn't work, too — the next "copy" of the maze traps the boy.

题意:给出一个n*m的迷宫,在一个平面上有无限个这种迷宫,每个迷宫的上下左右都是完全相同的这种n*m的迷宫(方向和里面的布局都完全一样),也就是说以起始点为原点,所有(x,y)与(x%n,y%m)的内容(不包括‘s’)是相同的(模了数,迷宫在平面上周期性排列,若x<0时要(x%n+n)%n,y<0时同理),比如在这个迷宫走到了边界位置,如果另一个迷宫对应位置没有墙,就可以从另一个迷宫下边界进入,问是否能一直走下去使得离出发点的欧拉距离无限远

思路:以原点为坐标,若能走到无限远处,则在途中必定会在不同的迷宫中经过相同的对应点(有点类似同余模,把当前坐标模了之后可以对应相同的坐标),所以问题就转换为是否能找到不同的坐标有相同的对应点,若有则可以走到无限远,否则就不行

再放个test25的样例,这个要输出Yes

12 12
##.#######.#
#..#......S#
#.#..#######
..#.###.....
##..##..####
#..##..#####
..##..#.....
###..##.####
##..#...####
#..##.######
..##..####..
##...#####.#

 #include<bits/stdc++.h>
using namespace std;
const int amn=2e3,inf=0x3f3f3f3f;
int n,m;
char mp[amn][amn];
bool f;
int dt[][]={{,},{,-},{,},{-,}},stx,sty;
struct node{
int x, y;
};
node used[amn][amn];
queue<node> q;
void bfs(int sx,int sy){
node a;
a.x=sx;
a.y=sy;
used[sx][sy].x=sx;
used[sx][sy].y=sy;
q.push(a);
int x,y,dx,dy;
while(q.size()){
a=q.front();q.pop();
for(int i=;i<;i++){
dx=a.x+dt[i][];
dy=a.y+dt[i][];
x=(dx%n+n)%n,y=(dy%m+m)%m; ///把负数坐标变为正数 x=(x%n+n)%n;负数取模会输出负数这时加上模数就是正数的对应值如-6%3=0,(3-0)%3=0,-5%3=-2,(3-2)%3=1,-4%3=-1,(3-1)%3=2...
//cout<<x<<' '<<y<<endl;
if(mp[x][y]=='#')continue;
if(used[x][y].x==inf){
used[x][y].x=dx;
used[x][y].y=dy;
node po;
po.x=dx;
po.y=dy;
q.push(po);
}
else if(used[x][y].x!=dx||used[x][y].y!=dy){ ///如果当前坐标模出来后能对应一个不同的坐标,则是可以走到无限远的
f=;
return ;
}
}
}
}
int main(){
cin>>n>>m;
for(int i=;i<n;i++){
for(int j=;j<m;j++){
cin>>mp[i][j];
if(mp[i][j]=='S'){stx=i,sty=j;}
used[i][j].x=inf;
used[i][j].y=inf;
}
}
f=;
bfs(stx,sty);
if(f)printf("Yes\n");
else printf("No\n");
}
/***
给出一个n*m的迷宫,在一个平面上有无限个这种迷宫,每个迷宫的上下左右都是完全相同的这种n*m的迷宫(方向和里面的布局都完全一样),
也就是说以起始点为原点,所有(x,y)与(x%n,y%m)的内容(不包括‘s’)是相同的(模了数,迷宫在平面上周期性排列,若x<0时要(x%n+n)%n,y<0时同理),
比如在这个迷宫走到了边界位置,如果另一个迷宫对应位置没有墙,就可以从另一个迷宫下边界进入,问是否能一直走下去使得离出发点的欧拉距离无限远 以原点为坐标,若能走到无限远处,则在途中必定会在不同的迷宫中经过相同的对应点(有点类似同余模,把当前坐标模了之后可以对应相同的坐标),所以问题就转换为
是否能找到不同的坐标有相同的对应点,若有则可以走到无限远,否则就不行
***/

CodeForces 196B Infinite Maze的更多相关文章

  1. Codeforces 197D - Infinite Maze

    197D - Infinite Maze 思路:bfs,如果一个点被搜到第二次,那么就是符合要求的. 用vis[i][j].x,vis[i][j].y表示i,j(i,j是取模过后的值)这个点第一次被搜 ...

  2. Infinite Maze CodeForces - 196B

    We've got a rectangular n × m-cell maze. Each cell is either passable, or is a wall (impassable). A ...

  3. [CodeForces - 197D] D - Infinite Maze

    D - Infinite Maze We've got a rectangular n × m-cell maze. Each cell is either passable, or is a wal ...

  4. xtu summer individual 3 C.Infinite Maze

    B. Infinite Maze time limit per test  2 seconds memory limit per test  256 megabytes input standard ...

  5. Infinite Maze

    从起点开始走,对于可以走到的位置,都必定能从这个位置回到起点.这样,对地图进行搜索,当地图中的某一个被访问了两次,就能说明这个地图可以从起点走到无穷远. 搜索的坐标(x,y),x的绝对值可能大于n,的 ...

  6. 【codeforces 196B】Infinite Maze

    [题目链接]:http://codeforces.com/problemset/problem/196/B [题意] 给你一个n*m的棋盘; 然后你能够无限复制这个棋盘; 在这个棋盘上你有一个起点s; ...

  7. codeforces 622A Infinite Sequence

    A. Infinite Sequence time limit per test 1 second memory limit per test 256 megabytes input standard ...

  8. Codeforces 123 E Maze

    Discription A maze is represented by a tree (an undirected graph, where exactly one way exists betwe ...

  9. Codeforces 377 A Maze【DFS】

    题意:给出n*m的矩阵,矩阵由'.'和'#'组成,再给出k,表示需要在'.'处加k堵墙,使得剩下的'.'仍然是连通的 先统计出这个矩阵里面总的点数'.'为sum 因为题目说了一定会有一个解,所以找到一 ...

随机推荐

  1. Gnu pgp加密解密

    在生成密钥的时候,无法生成足够多的随机数,提示“ Not enough random bytes available. Please do some other work to givethe OS ...

  2. 乱世兄弟(豹老头 X 天捣臼)

    论CP之冷冷冷 只为白凡扫剧- 片源: 乱世兄弟 BGM:兄弟 人物角色: 豹老头 - 白凡 天捣臼 大专栏  乱世兄弟(豹老头 X 天捣臼)- 姚鲁 B站:豹老头 X 天捣臼-MV<乱世兄弟& ...

  3. 用pyqt5简单实现Mqtt调试助手-初学python

    最近在学习pyqt5,因为我们是做远程物联网设备的,所以就做个mqtt调试助手来练手.第一次做这种程序,没有加异常处理,会有很多不足,欢迎留言拍砖,直接上代码了 这个是程序入口, # 使用前先安装py ...

  4. Hibernate入门之主键生成策略详解

    前言 上一节我们讲解了Hibernate命名策略,从本节我们开始陆续讲解属性.关系等映射,本节我们来讲讲主键的生成策略. 主键生成策略 JPA规范支持4种不同的主键生成策略(AUTO.IDENTITY ...

  5. 微信小程序入门讲解

    微信小程序 注册 由于发文限制,请自行到微信公众平台注册 项目结构 project.config.json 配置文件(不需要动) app.json(用户配置) 路由pages window 整个程序样 ...

  6. USB小白学习之路(2)端点IN/OUT互换

    端点2(out)和端点6(in)的out_in互换 注:这里的out和in都是以host为标准说的,out是host的out,在设备(Cy7c68013)这里其实是输入端口:in是host的in,在设 ...

  7. 配置github——每次提交后使contributions有记录(有小绿格子)

    # 配置github--每次提交后使contributions有记录(有小绿格子) 这几天都有将自己的代码提交到github上,但是在profile里的contributions的表格中没有我提交的记 ...

  8. 【技巧】歪脑筋优化flexbox瀑布流布局方案

    效果先行 需求 在大量"不定宽"元素并排的布局模式下,上图是我们想要的最佳布局但是FlexBox布局虽然枪弹但并不能完全呈现以上布局,于是我们需要结合FlexBox作下小的改动即可 ...

  9. vue学习笔记(四)

    一.vue-router 1.简介 我们经常使用vue开发单页面应用程序(SPA).在开发SPA过程中,路由是必不可少的部分,vue的官方推荐是vue-router.单页面应用程序看起来好像是一个页面 ...

  10. python数据分析工具 | pandas

    pandas是python下强大的数据分析和探索工具,是的python在处理数据时非常快速.简单.它是构建在numpy之上的,包含丰富的数据处理函数,支持时间序列分析功能,支持灵活处理缺失数据. pa ...