题目https://www.luogu.org/problemnew/show/P1363

题意

有一个地图,起点是S,障碍物用#表示。可以将这个地图不断的在四周重复,问从起点开始是否可以走到无限远的地方去。

思路

刚开始想的是地图放中间,然后在四周都拼一个同样的,然后看看能不能走回到起点。

但是发现仅仅是拼四个是不够的,那拼九个?反正又是MLE又是WA的。

主要思路还是dfs搜索,题目中其实给了提示了,可以利用取模。

把每一次走的位置都压缩到一个地图上去。但是又去标记这是在那一块被访问到的。

如果可以两次走到这个点(其实并不是走到这个点而是走到另一块的对应位置)就说明可以走到无限远的地方。

所以我们需要个vis数组。第一个用来标记这个点是否被访问过,第二三个用来标记访问到对应这个点时候的横纵坐标。

dfs时即需要知道当前的坐标,又需要知道取模之前实际的坐标。

如果之前走到这个点时候的横纵坐标和现在实际的坐标是相同的,说明走到的是同一个点,如果有一个是不同的说明已经走到另一块地图上去了。

 //#include<bits/stdc++>
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<stdlib.h>
#include<queue>
#include<map>
#include<stack>
#include<set> #define LL long long
#define ull unsigned long long
#define inf 0x7f7f7f7f using namespace std; int n, m;
const int maxn = ;
char gra[maxn][maxn];
int vis[maxn][maxn][];
int dx[] = {, , -, };
int dy[] = {, -, , };
int stx, sty; bool check(int x, int y)
{
if(x < || y < || x >= n || y >= m)return false;
else return true;
} bool ans;
void dfs(int x, int y, int acx, int acy)
{
if(vis[x][y][] && vis[x][y][] == acx && vis[x][y][] == acy){ return;
}
else if(vis[x][y][] && (vis[x][y][] != acx || vis[x][y][] != acy)){
ans = true;
return;
}
vis[x][y][] = true;
vis[x][y][] = acx;
vis[x][y][] = acy;
for(int i = ; i < ; i++){
int tox = (x + dx[i] + n) % n, toy = (y + dy[i] + m) % m;
if(check(tox, toy) && gra[tox][toy] != '#'){
dfs(tox, toy, acx + dx[i], acy + dy[i]);
}
}
return;
} int main()
{
while(scanf("%d%d", &n, &m) != EOF){
memset(gra, , sizeof(gra));
memset(vis, , sizeof(vis));
ans = false;
for(int i = ; i < n; i++){
cin>>gra[i];
for(int j = ; j < m; j++){
if(gra[i][j] == 'S'){
stx = i;
sty = j;
}
}
} dfs(stx, sty, stx, sty);//vis[stx][sty][0] = true;
if(ans)printf("Yes\n");
else printf("No\n");
} return ;
}

洛谷P1363 幻想迷宫【dfs】的更多相关文章

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

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

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

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

  3. 洛谷P1363 幻想迷宫

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

  4. 洛谷 P1363 幻想迷宫

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

  5. 络谷 P1363 幻想迷宫

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

  6. 洛谷1363 幻象迷宫dfs

    题目网址:https://www.luogu.com.cn/problem/P1363 迷宫是无限多块地图拼接而成的,问是否可以在迷宫中走无限远.解决方案是dfs,走出初始地图之后的位置映射到原位置( ...

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

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

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

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

  9. 【洛谷P1363】幻象迷宫

    P1363 幻想迷宫 显然,若从原图中起点走到相邻的图中对应的"起点"位置 ,就可以无限走下去, 若一个点从原图中可以到达,到了非原图中也可以到达,就可以无限走下去 我们不妨记录下 ...

随机推荐

  1. [转帖]Kafka 原理和实战

    Kafka 原理和实战 https://segmentfault.com/a/1190000020120043 两个小时读完... 实在是看不完... 1.2k 次阅读  ·  读完需要 101 分钟 ...

  2. centos7 安装jmeter5.1

    前提条件:安装了jdk1.8.因为jmeter5.1需要的环境就是jdk1.8,官网有写的. 1.下载jmeter5.1的安装包 下载地址:https://jmeter.apache.org/down ...

  3. GFS(Google File System,谷歌文件系统)----(1)读写一致性

    GFS副本控制协议--中心化副本控制协议 对于副本集的更新操作有一个中心节点来协调管理,将分布式的并发操作转化为单点的并发操作,从而保证副本集内各节点的一致性.在GFS中,中心节点称之为Primary ...

  4. centos8自定义目录安装php7.3

    1.目录结构 源码目录:/home/werben/pkgsrc/php-7.3.11 安装目录:/home/werben/application/php7.3.11 2.下载php源码 # 官网地址: ...

  5. 落网数据库简单查询接口 caddy+php7+mongodb

    落网数据库简单查询接口 一个简单的DEMO,使用了caddy + php7 + mongodb 数据库&接口设计 来自 https://github.com/Aedron/Luoo.spide ...

  6. Redis学习存档(1)——安装

    以虚拟机中的Linux系统(CentOS 6.5)中安装Redis为例 一.下载Redis 使用wget进行下载,可能部分系统不带wget命令,则yum下载即可 yum -y install wget ...

  7. 论文阅读:《Bag of Tricks for Efficient Text Classification》

    论文阅读:<Bag of Tricks for Efficient Text Classification> 2018-04-25 11:22:29 卓寿杰_SoulJoy 阅读数 954 ...

  8. instanceof关键字 与 getClass()

    在equals()中使用getClass进行类型判断 我们在覆写equals()方法时,一般都是推荐使用getClass来进行类型判断,不是使用instanceof.我们都清楚instanceof的作 ...

  9. FFmpeg里面的时间单位

    pts单位:1/90 ms(每个单位代表1/90 ms)  RTP包头有个STAMP 对于视频 STAMP/90 就是 PTS (毫秒) 对于音频 STAMP/samplerate * 1000 才是 ...

  10. java代码实现mock数据

    废话不多说,直接上代码. /** * 发get请求,获取文本 * * @param getUrl * @return 网页context */ public static String sendGet ...