题目网址:https://www.luogu.com.cn/problem/P1363

迷宫是无限多块地图拼接而成的,问是否可以在迷宫中走无限远。解决方案是dfs,走出初始地图之后的位置映射到原位置(取模),如果同一个映射位置两次经过的坐标不一样,则表示这个位置可以无限多次经过,就走不出迷宫。

代码如下:

 #include<bits/stdc++.h>
using namespace std;
typedef unsigned int ui;
typedef long long ll;
typedef unsigned long long ull;
#define pf printf
#define mem(a,b) memset(a,b,sizeof(a))
#define prime1 1e9+7
#define prime2 1e9+9
#define scand(x) scanf("%llf",&x)
#define f(i,a,b) for(int i=a;i<=b;i++)
#define scan(a) scanf("%d",&a)
#define dbg(args) cout<<#args<<":"<<args<<endl;
#define pb(i) push_back(i)
#define ppb(x) pop_back(x)
#define inf 0x3f3f3f3f
#define maxn 1505
int n,m,t,sx,sy;
bool flag=false;
char Map[maxn][maxn];
int vis[maxn][maxn][];//第一维存放是否访问过,第二、三维存放第一次 访问的横纵坐标
int dir[][]={{,},{,-},{-,},{,}};
void dfs(int mx,int my,int x,int y,int dep)
{
if(flag)return;
// pf("%d:%d %d\n",dep,x,y);
if(vis[mx][my][]&&(vis[mx][my][]!=x||vis[mx][my][]!=y))//从(x,y)位置会到达像(x,y+/-m)这样的位置,所以只有一个坐标不同
{//表明映射坐标是第二次到达,可以到达两次则可以到达无穷次
flag=true;
return;
}
//如果已经标志第一次经过该点搜索失败,则下一次从这个点开始深搜同样会失败,跳过
if(vis[mx][my][]&&vis[mx][my][]==x&&vis[mx][my][]==y)return; vis[mx][my][]=;//第一次访问,设置第一次访问的坐标信息
vis[mx][my][]=x;
vis[mx][my][]=y;
int xx,yy,modx,mody;
f(i,,)
{
xx=x+dir[i][];
yy=y+dir[i][]; modx=(xx+(n*))%n;//正向取模,防止模数非正
mody=(yy+(m*))%m;
if(Map[modx][mody])
{
dfs(modx,mody,xx,yy,++dep);
}
}
}
char c;
int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
std::ios::sync_with_stdio(false);
while(scanf("%d%d",&n,&m)!=EOF)
{
mem(Map,);
f(i,,n-)
{
f(j,,m-)
{
scanf(" %c",&c);
if(c=='.')Map[i][j]=;
if(c=='S')
{
Map[i][j]=;
sx=i;
sy=j;
}
} }
flag=false;
mem(vis,);
dfs(sx,sy,sx,sy,);
if(flag)pf("Yes\n");
else pf("No\n");
} }

洛谷1363 幻象迷宫dfs的更多相关文章

  1. 洛谷 - P1141 - 01迷宫 - dfs

    https://www.luogu.org/problemnew/show/P1141 能互相到达的格子的答案自然是一样的,第一次dfs标记联通块,第二次dfs把cnt传递到整个联通卡并顺手消除vis ...

  2. 洛谷P1238 走迷宫

    洛谷1238 走迷宫 题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个 ...

  3. 【洛谷】【搜索(dfs)】P1363 幻想迷宫

    [题目描述:] 幻象迷宫可以认为是无限大的,不过它由若干个N*M的矩阵重复组成.矩阵中有的地方是道路,用'.'表示:有的地方是墙,用'#'表示.LHX和WD所在的位置用'S'表示.也就是对于迷宫中的一 ...

  4. 洛谷P1363 幻想迷宫

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

  5. 洛谷 P1363 幻想迷宫 解题报告

    P1363 幻想迷宫 题目描述 背景 Background (喵星人LHX和WD同心协力击退了汪星人的入侵,不幸的是,汪星人撤退之前给它们制造了一片幻象迷宫.) WD:呜呜,肿么办啊-- LHX:mo ...

  6. 洛谷 P1363 幻想迷宫

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

  7. 洛谷P1605:迷宫(DFS)

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

  8. 洛谷P1141 01迷宫【DFS】

    有一个仅由数字00与11组成的n \times nn×n格迷宫.若你位于一格0上,那么你可以移动到相邻44格中的某一格11上,同样若你位于一格1上,那么你可以移动到相邻44格中的某一格00上. 你的任 ...

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

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

随机推荐

  1. Python---2文本编辑器

    1.介绍 在Python的交互式命令行写程序,好处是一下就能得到结果,坏处是没法保存,下次还想运行的时候,还得再敲一遍. 所以,实际开发的时候,我们总是使用一个文本编辑器来写代码,写完了,保存为一个文 ...

  2. SpringBoot 处理 POST Json 传参枚举

    在 Spring 框架中对枚举类型的序列化/反序列化是有限制的. 假设如下面这样在某些情况下就不能正常工作: 123456789 public enum PayChannelEnum implemen ...

  3. c++背包问题

    又鸽了好久…… 前言 博主刚刚学会背包问题不久,然后有一段时间没练习了 今天就来重新温习一下,顺手就写了这一篇博客. 好了,下面进入正题! 算法简介 背包问题是动态规划的一个分支 主要是分成了01背包 ...

  4. USB小白学习之路(4)HID键盘程序

    HID键盘程序 1. 特别注意 需要特别注意,各个例程中的设备描述符,配置描述符等各种描述符都是已经配置好了的,我们需要做的只是在例程中将代码修改为自己需要的部分即可,一般情况下是不可以串搭配的. 2 ...

  5. iptables 开放80端口以及删除80端口的规则

    [root@zabbix-server html]# iptables --version iptables v1.4.21 [root@zabbix-server html]# iptables - ...

  6. Java核心技术卷1 第10版 笔记

    3.3 数据类型 Java是一种强类型语言.必须为每一个变量声明一种类型.在java中,一共有8终基本类型. 3.3.1 整形 类型 存储需求 取值范围 int 4字节 -2 147 483 648 ...

  7. CSS 图像拼合技术(雪碧图)

    1.css 图像拼合 图像拼合就是单个图像的集合. 有许多图像的网页可能需要很长的时间来加载和生成多个服务器的请求. 使用图像拼合会降低服务器的请求数量,并节省带宽. 代码如下: <!docty ...

  8. 前端每日实战:42# 视频演示如何用纯 CSS 创作一个均衡器 loader 动画

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/oybWBy 可交互视频教程 此视频 ...

  9. [LeetCode] 207. Course Schedule 课程表

    题目: 分析: 这是一道典型的拓扑排序问题.那么何为拓扑排序? 拓扑排序: 有三件事情A,B,C要完成,A随时可以完成,但B和C只有A完成之后才可完成,那么拓扑排序可以为A>B>C或A&g ...

  10. iOS应用构建与部署小结

    注:本文首发于我的个人博客:https://evilpan.com/2019/04/06/ios-basics/ 上篇文章介绍了Objective-C的基本概念,本文就来接着看如何创建我们的第一个简单 ...