幻象迷宫可以认为是无限大的,不过它由若干个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组数据.

dfs的题,不同的是这里变成了无限大的迷宫。每次遇到无限大的时候就有点懵,关键是出现了什么样的状况就是无限大了呢?一开始想比如穿越了边界是不是就能走到无限远了,但显然不是,因为穿越边界之后有可能仍然是死路,比如说上面的样例2 。
正确的条件应该是,当走到(modx,mody)时,仍然记录到达此点的真实的x和y,当再一次走到(modx,mody)时,如果此时的真实的x和y不同,说明已经穿越了若干个完整的地图了,接下来只需和刚才走一样的路线就一定能走无限远了。
代码如下:

#include <iostream>
#include <limits.h>
#include <cstdio>
#include <cmath>
#include <stack>
#include <string>
#include <algorithm>
#include <sstream>
#include <vector>
#include <queue>
#include <cstring>
#include <fstream>
#include <map>
#include <list>
#include <set>
using namespace std;
int m,n,sx,sy,flag;
struct point{int x,y;
};
char grid[1510][1510];
int direx[4]={-1,0,0,1};
int direy[4]={0,-1,1,0};
int vis[1510][1510];    //记录(modx,mody)的访问情况
point vis2[1510][1510]; //记录真实的x和y
void dfs(int modx,int mody,int x,int y){if(flag) return ;if(vis[modx][mody]&&(vis2[modx][mody].x!=x||vis2[modx][mody].y!=y)){flag=1;return ;}vis[modx][mody]=1;vis2[modx][mody].x=x;vis2[modx][mody].y=y;for(int k=0;k<4;k++){int newmodx=(modx+direx[k]+m)%m,newmody=(mody+direy[k]+n)%n;int newx=x+direx[k],newy=y+direy[k];if(grid[newmodx][newmody]!='#'){if(!vis[newmodx][newmody]||vis2[newmodx][newmody].x!=newx||vis2[newmodx][newmody].y!=newy){dfs(newmodx,newmody,newx,newy); //如果都完全一样就不用走了,不走回头路}}}
}
int main(){while(cin>>m>>n){memset(vis,0,sizeof(vis));memset(vis2,0,sizeof(vis2));flag=0;for(int i=0;i<m;i++){cin>>grid[i];}for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(grid[i][j]=='S'){sx=i,sy=j;}}}dfs(sx,sy,sx,sy);if(flag) cout<<"Yes\n";else cout<<"No\n";}return 0;
}

【洛谷】P1363 幻象迷宫相关推荐

  1. 洛谷P1363幻象迷宫

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

  2. 洛谷P1363 幻象迷宫(DFS)

    输入样例#1: 5 4 ##.# ##S# #-# #.## #-# 5 4 ##.# ##S# #-# -#. #.## 输出样例#1: Yes No 大概就是说给出一个01迷宫类的地图,按照这个地 ...

  3. 伪题解 洛谷 P1363 幻想迷宫(DFS)

    毒瘤题,做了一晚上抄题解A了 因为是抄题解,我也不好意思说什么了,就发篇博客纪念一下吧 #include<iostream> #include<cstring> #includ ...

  4. 图论算法——幻象迷宫(洛谷 P1363)

    题目选自洛谷P1363 大概就是说给出一个01迷宫类的地图,按照这个地图来扩展新地图,类似这样 然后问你是不是###可以走无限远. ###那么,我们可以很清晰的意识到,如果可以从点(x,y)出发,达到 ...

  5. 洛谷 P1238 走迷宫【搜索】【DFS】

    洛谷 P1238 走迷宫 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 洛谷 P1238 走迷宫 二.题目分析 (一)算法标签 搜索 DFS ( ...

  6. 2019.03.04【ZJOI2018】【BZOJ5213】【洛谷P4339】迷宫(自动机)(数论)

    BZOJ传送门 洛谷传送门 解析: 这道题本质其实是要最小化一个能够接受所有mmm进制下KKK的倍数的自动机. 显然我们有一个方案就是KKK个节点,iii的第jjj条边向(i∗m+j)%K(i*m+j ...

  7. 洛谷P1605:迷宫(DFS)

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫中移动有上下左右 ...

  8. 洛谷P1141 01迷宫

    因为各种乱七八糟的原因,学搜索实在是学了太久了也咕了好久博客啊.准备再做一遍之前写过的题顺便补一下博客qwq 01迷宫 [题目链接](https://www.luogu.org/problemnew/ ...

  9. 洛谷P1238 走迷宫

    走迷宫 题目链接 这道题第一次写的时候写了好久,因为不会写输出qwqwq,于是让某苦力调了两天一个对的程序. 还有这道题需要另外注意的地方是它对顺序有要求,并且一定要分清你的横纵坐标和行列是不一样的. ...

最新文章

  1. 版权之争,谁更棋高一着?
  2. pycharm运行完第一个程序,怎么运行第二个程序
  3. Burpsuite如何抓取使用了SSL或TLS传输的 IOS App流量
  4. [蓝桥杯历届试题] 国庆星期日
  5. WebService 工作原理及实例教程
  6. R语言聚类算法之系谱聚类(Hierarchical Method)
  7. 约瑟夫环-单向循环链表
  8. iOS语音识别功能实现
  9. 论文笔记_S2D.50_Kimera 具有结构规律的增量视觉-惯性三维网格生成
  10. 财务报表分析-损益表,资产负债表,现金流,回报率
  11. 关于安卓设备更改和烧录IMEI的图文教程
  12. 论文公式编号MATHTYPE
  13. 用python做生信_1 python生信入门
  14. 计算机主机时间不保存,电脑主板系统时间不能保存
  15. 期货高手的交易方法总结,
  16. java excel 边框颜色_poi生成excel整理(设置边框/字体/颜色/加粗/居中/)[转]
  17. play框架使用起来(17)
  18. 让站长崩溃的骚操作,你中过招吗?
  19. 把html页面保存为图片格式
  20. [辩论]以成败轮英雄是可取的——正方一辩稿

热门文章

  1. 今日分享|闪魔钢化膜5.8又来了/kn95口罩50个29.9/奥利司他胶囊7粒17.9/加拿大芬尼湾矿泉水/耐克同款/面膜等...
  2. 四川行无疆讲解拼多多用户群体分析
  3. 【工具】eclipse不自动弹出提示
  4. Part1.8——Linux系统中的软件管理
  5. 连连支付将引中金入股 或为A股上市IPO铺路
  6. 2012年五大领导力
  7. java 静态类 创建_Java 中的静态类
  8. 手机壁纸 | Vlog210808
  9. 《压力下的角逐:索尼PS3与微软XBOX360的生死时速之战》四
  10. php启动失败80端口被占用,80端口被占用 Apache启动失败的解决方法