题目选自洛谷P1363

大概就是说给出一个01迷宫类的地图,按照这个地图来扩展新地图,类似这样

然后问你是不是###可以走无限远。

###那么,我们可以很清晰的意识到,如果可以从点(x,y)出发,达到比如(-x,y)或者(x,-y) , (-x,-y) , (x+m,y+n) [假设宽m高n] , 就可以从这个点再次达到相同的点(即可以从(x,y)出发,达到(i,j)且|i|%n=x , |j|%m=y。),一直这么走下去。

那就搜好了。开一个三维vis数组第一维记录有无被访问,第二维记录被访问时横坐标,第三维纵坐标。

判断重复到达且横纵坐标不同即可。应该注意先判什么后判什么。**如果是同一个分矩阵走过去的话自然tx==vis[x][y][0] **(此处x为|tx|%n,y为|ty|%m,即映射到中心矩阵的位置),就会被判掉。 而且注意tx!=vis[x][y][0] 和ty!=vis[x][y][1]满足一个即可。

题目描述

(喵星人LHX和WD同心协力击退了汪星人的入侵,不幸的是,汪星人撤退之前给它们制造了一片幻象迷宫。)

WD:呜呜,肿么办啊……

LHX:momo...我们一定能走出去的!

WD:嗯,+U+U!

描述 Description

幻象迷宫可以认为是无限大的,不过它由若干个N*M的矩阵重复组成。矩阵中有的地方是道路,用'.'表示;有的地方是墙,用'#'表示。LHX和WD所在的位置用'S'表示。也就是对于迷宫中的一个点(x,y),如果(x mod n,y mod m)是'.'或者'S',那么这个地方是道路;如果(x mod n,y mod m)是'#',那么这个地方是墙。LHX和WD可以向上下左右四个方向移动,当然不能移动到墙上。

请你告诉LHX和WD,它们能否走出幻象迷宫(如果它们能走到距离起点无限远处,就认为能走出去)。如果不能的话,LHX就只好启动城堡的毁灭程序了……当然不到万不得已,他不想这么做。。。

输入格式

输入包含多组数据,以EOF结尾。

每组数据的第一行是两个整数N、M。

接下来是一个N*M的字符矩阵,表示迷宫里(0,0)到(n-1,m-1)这个矩阵单元。

输出格式

对于每组数据,输出一个字符串,Yes或者No。

输入输出样例

输入 1

5 4
##.#
##S#
#..#
#.##
#..#
5 4
##.#
##S#
#..#
..#.
#.##

输出 1

Yes
No

说明/提示

对于30%的数据,N,M<=20

对于50%的数据,N.M<=100.

对于100%的数据,N,M<=1500,每个测试点不超过10组数据.

解题代码:

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
bool mapx[1510][1510]={false};
int vis[1510][1510][3]={0};
int m,n,sx,sy,wayx[4]={0,-1,0,1},wayy[4]={-1,0,1,0},ans=0;
void dfs(int x,int y,int posx,int posy)
{if (vis[posx][posy][2] && (vis[posx][posy][0]!=x || vis[posx][posy][1]!=y)){ans=1;return;}if (vis[posx][posy][2] && vis[posx][posy][0]==x && vis[posx][posy][1]==y) return;vis[posx][posy][0]=x; vis[posx][posy][1]=y; vis[posx][posy][2]=1;register int tox,toy;for (int w=0;w<=3;w++){tox=(posx+wayx[w]+n)%n; toy=(posy+wayy[w]+m)%m;    if (mapx[tox][toy])dfs(x+wayx[w],y+wayy[w],tox,toy);}
}
int main()
{ios::sync_with_stdio(false);register char ch;while (cin>>n>>m){memset(mapx,false,sizeof(mapx));memset(vis,false,sizeof(vis));ans=0;for (int i=0;i<n;i++)for (int j=0;j<m;j++){cin>>ch;if (ch=='.') mapx[i][j]=true;else if (ch=='S'){sx=i; sy=j;mapx[i][j]=true; }}dfs(sx,sy,sx,sy);if (ans) printf("Yes\n");else printf("No\n");}return 0;
}

图论算法——幻象迷宫(洛谷 P1363)相关推荐

  1. 洛谷P1363幻象迷宫

    问题描述 (喵星人LHX和WD同心协力击退了汪星人的入侵,不幸的是,汪星人撤退之前给它们制造了一片幻象迷宫.) WD:呜呜,肿么办啊-- LHX:momo...我们一定能走出去的! WD:嗯,+U+U ...

  2. 深入理解 操作系统 LRU算法(以洛谷P1540题为例)

    LRU算法 LeastRecentlyUsedLeast Recently UsedLeastRecentlyUsed 算法,意为"最近最少使用",这是操作系统内存管理部分重要的一 ...

  3. 深入理解 操作系统 SJF算法(以洛谷P1223题为例)

    CPU Scheduling Algorithms 重要的CPU调度算法如下: FCFS Scheduling(First-Come, First-Served) SJF Scheduling(Sho ...

  4. 图论——最长路(洛谷 P1807)

    题目选自洛谷P1807 对于一个有向无环图,可以采取广搜将结点依次搜索,记录当前结点的最长路并在循环过程中不断更新. 题目描述 设 G 为有 n 个顶点的带权有向无环图,G 中各顶点的编号为 1 到  ...

  5. 深度优先搜索——迷宫(洛谷 P1605)

    题目选自洛谷P1605 题目是非常经典以及简单的DFS题目 这里给出模板 int dfs(int t) {if(满足输出条件){输出解;}for(int i=1;i<=尝试方法数;i++)if( ...

  6. (快速幂算法+高精度)洛谷P1045 麦森数

    前言   故事的最后,让我们以一道十分经典的题目--<麦森数>来结尾.接受现实吧,总会有我们没准备过的高精度运算出现.我们固然可以提前把高精度的快速幂模板也准备好,但是总会有百密一疏的时候 ...

  7. 图论--网络流--最大流 洛谷P4722(hlpp)

    题目描述 给定 nn 个点,mm 条有向边,给定每条边的容量,求从点 ss 到点 tt 的最大流. 输入格式 第一行包含四个正整数nn.mm.ss.tt,用空格分隔,分别表示点的个数.有向边的个数.源 ...

  8. 图论——图的遍历(洛谷 P3916)

    题目选自洛谷P3916 反向建边 + dfs 按题目来每次考虑每个点可以到达点编号最大的点,不如考虑较大的点可以反向到达哪些点 循环从N到1,则每个点i能访问到的结点的A值都是i 每个点访问一次,这个 ...

  9. KMP算法小总结 洛谷P3375 【模板】KMP字符串匹配

    提问:这里有一个长度为n的字符串str1和长度为m的字符串str2(n > = m),问在str1中str2出现了几次? 如果使用暴力求解,一个一个比较,在n和m都极大的情况下将花费非常多的不必 ...

最新文章

  1. Github标星24k,127篇经典论文下载,这份深度学习论文阅读路线图不容错过
  2. python画图程序-无所不能的python编程是怎么快速画图的呢?5分钟学会!
  3. Code Review效率低?来试试智能语法服务
  4. 三圆相交阴影部分面积_小学六年级图形面积的题很多家长都不会,一些初中生也未必会做...
  5. centos7安装oracle12c 一
  6. 时序数据库技术体系 – InfluxDB TSM存储引擎之数据写入
  7. springboot启动时的一个bug
  8. 【高并发】JUC中的Executor框架详解1
  9. 漳州职业技术学院计算机学费多少钱,漳州职业技术学院单招2021年学费多少
  10. 1415120000,华为这个数字赞爆!
  11. 对/boot/grub/grub.conf的理解
  12. 树形dp 没有上司的舞会
  13. 智慧运维:基于 BIM 技术的可视化管理系统
  14. html怎么做卫星图地址,如何基于卫星地图制作矢量化电子地图
  15. python 打开txt文件
  16. TRUNCATE和DETELE的区别
  17. 小学用计算机画画的课件,小学信息技术绘图课件
  18. android7.1刷supersu,安卓怎么刷SuperSU 安卓系统刷入超级授权SuperSU Pro方法
  19. bzoj3772: 精神污染
  20. 涵盖多场景区块链与政务结合 应用前景广阔

热门文章

  1. Ubuntu freemind 中文乱码解决方案
  2. 多进程Twemproxy
  3. csharp基础练习题:猫年,狗年【难度:0级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练
  4. mysql binlog跟踪_在MySQL中使用init-connect与binlog来实现用户操作追踪记录
  5. 数据湖 与 Lambda 架构
  6. 面经系列(二)公司:HC科技
  7. oracle递归查询指定子节点,oracle递归查询子节点
  8. 智己汽车联手美摄科技深度合作Carlog车载摄像系统
  9. 如何查看电脑出场日期以及详细信息
  10. 苹果手机一直黑屏转圈_一直是行业风向标的苹果,现在也开始模仿国产手机了?|传感器|vivo|手机|国产手机|风向标...