CodeForces 196B Infinite Maze
2 seconds
256 megabytes
standard input
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.
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.
Print "Yes" (without the quotes), if the little boy can walk infinitely far from the starting point. Otherwise, print "No" (without the quotes).
5 4
##.#
##S#
#..#
#.##
#..#
Yes
5 4
##.#
##S#
#..#
..#.
#.##
No
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的更多相关文章
- Codeforces 197D - Infinite Maze
197D - Infinite Maze 思路:bfs,如果一个点被搜到第二次,那么就是符合要求的. 用vis[i][j].x,vis[i][j].y表示i,j(i,j是取模过后的值)这个点第一次被搜 ...
- Infinite Maze CodeForces - 196B
We've got a rectangular n × m-cell maze. Each cell is either passable, or is a wall (impassable). A ...
- [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 ...
- xtu summer individual 3 C.Infinite Maze
B. Infinite Maze time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Infinite Maze
从起点开始走,对于可以走到的位置,都必定能从这个位置回到起点.这样,对地图进行搜索,当地图中的某一个被访问了两次,就能说明这个地图可以从起点走到无穷远. 搜索的坐标(x,y),x的绝对值可能大于n,的 ...
- 【codeforces 196B】Infinite Maze
[题目链接]:http://codeforces.com/problemset/problem/196/B [题意] 给你一个n*m的棋盘; 然后你能够无限复制这个棋盘; 在这个棋盘上你有一个起点s; ...
- codeforces 622A Infinite Sequence
A. Infinite Sequence time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Codeforces 123 E Maze
Discription A maze is represented by a tree (an undirected graph, where exactly one way exists betwe ...
- Codeforces 377 A Maze【DFS】
题意:给出n*m的矩阵,矩阵由'.'和'#'组成,再给出k,表示需要在'.'处加k堵墙,使得剩下的'.'仍然是连通的 先统计出这个矩阵里面总的点数'.'为sum 因为题目说了一定会有一个解,所以找到一 ...
随机推荐
- Hexo搭建总结
Hexo搭建过程记录 1.Hexo基本环境搭建 1.Hexo安装前提 Node.js和Git,他们的安装方法可以自行百度. 2.具体安装步骤可以参考: https://www.cnblogs.com/ ...
- 图形用户界面(GUI)应用程序开发——菜鸟的第一步
参考资源:贺老师博文 在看完贺老师的博文后,我就照葫芦画瓢的做了个求三角形面积的程序.这是我写的一篇所用时间最长博文(两个多小时,真心挺累,或许是我太笨吧),为了尽可能详细的把步骤写明白我截了二十一张 ...
- 热更新,App双开,App隐藏,App试用 -- Replugin的实际应用(原创)
热更新,App双开,App隐藏,App试用 -- Replugin的实际应用(原创) RePlugin是Qihoo 360公司的开源框架,原本目的是用于热更新.但是,这个框架提供的功能远远超出了热更新 ...
- nor flash之4字节地址模式
背景 容量低于 16M bytes 的 nor,一般使用 3 字节地址模式,即命令格式是 cmd + addr[2] + addr[1] + addr[0] + ... 使用超过 16M bytes ...
- 基于sklearn的metrics库的常用有监督模型评估指标学习
一.分类评估指标 准确率(最直白的指标)缺点:受采样影响极大,比如100个样本中有99个为正例,所以即使模型很无脑地预测全部样本为正例,依然有99%的正确率适用范围:二分类(准确率):二分类.多分类( ...
- Matplotlib数据可视化(5):柱状图与直方图
柱状图和直方图是两种非常类似的统计图,区别在于: 直方图展示数据的分布,柱状图比较数据的大小. 直方图X轴为定量数据,柱状图X轴为分类数据.因此,直方图上的每个条形都是不可移动的,X轴上的区间是连 ...
- Webpack和Gulp,Webpack和Gulp的基本区别:
Gulp和Webpack的基本区别: gulp可以进行js,html,css,img的压缩打包,是自动化构建工具,可以将多个js文件或是css压缩成一个文件,并且可以压缩为一行,以此来减少文件体积,加 ...
- 2020ubuntu1804server编译安装redis笔记(三)启动服务和使用redis
第一篇笔记记录了ubuntu1804server编译安装redis5,接下来要配置redis5了 网址:https://www.cnblogs.com/qumogu/p/12435694.html 第 ...
- linux4.1.36 解决 SPI 时钟找不到 不生成设备 device
最初的问题是 编译内核添加了 spi 支持,配置了 board 后,加载25q64驱动不执行probe 函数. 然后发现是,spi-s3c24xx.c 中的 probe 没有执行完就退出了 没有生成 ...
- mybatis进阶案例之多表查询
mybatis进阶案例之多表查询 一.mybatis中表之间的关系 在数据库中,实体型之间的关系主要有如下几种: 1.一对一 如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之 ...