洛谷P1363 幻想迷宫【dfs】
题目: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】的更多相关文章
- 洛谷 P1363 幻想迷宫 解题报告
P1363 幻想迷宫 题目描述 背景 Background (喵星人LHX和WD同心协力击退了汪星人的入侵,不幸的是,汪星人撤退之前给它们制造了一片幻象迷宫.) WD:呜呜,肿么办啊-- LHX:mo ...
- 伪题解 洛谷 P1363 幻想迷宫(DFS)
毒瘤题,做了一晚上抄题解A了 因为是抄题解,我也不好意思说什么了,就发篇博客纪念一下吧 #include<iostream> #include<cstring> #includ ...
- 洛谷P1363 幻想迷宫
题目描述 背景 Background (喵星人LHX和WD同心协力击退了汪星人的入侵,不幸的是,汪星人撤退之前给它们制造了一片幻象迷宫.) WD:呜呜,肿么办啊…… LHX:momo...我们一定能走 ...
- 洛谷 P1363 幻想迷宫
题目描述 背景 Background (喵星人LHX和WD同心协力击退了汪星人的入侵,不幸的是,汪星人撤退之前给它们制造了一片幻象迷宫.) WD:呜呜,肿么办啊…… LHX:momo...我们一定能走 ...
- 络谷 P1363 幻想迷宫
P1363 幻想迷宫 题目描述 背景 Background (喵星人LHX和WD同心协力击退了汪星人的入侵,不幸的是,汪星人撤退之前给它们制造了一片幻象迷宫.) WD:呜呜,肿么办啊…… LHX:mo ...
- 洛谷1363 幻象迷宫dfs
题目网址:https://www.luogu.com.cn/problem/P1363 迷宫是无限多块地图拼接而成的,问是否可以在迷宫中走无限远.解决方案是dfs,走出初始地图之后的位置映射到原位置( ...
- 洛谷 - P1141 - 01迷宫 - dfs
https://www.luogu.org/problemnew/show/P1141 能互相到达的格子的答案自然是一样的,第一次dfs标记联通块,第二次dfs把cnt传递到整个联通卡并顺手消除vis ...
- 【洛谷】【搜索(dfs)】P1363 幻想迷宫
[题目描述:] 幻象迷宫可以认为是无限大的,不过它由若干个N*M的矩阵重复组成.矩阵中有的地方是道路,用'.'表示:有的地方是墙,用'#'表示.LHX和WD所在的位置用'S'表示.也就是对于迷宫中的一 ...
- 【洛谷P1363】幻象迷宫
P1363 幻想迷宫 显然,若从原图中起点走到相邻的图中对应的"起点"位置 ,就可以无限走下去, 若一个点从原图中可以到达,到了非原图中也可以到达,就可以无限走下去 我们不妨记录下 ...
随机推荐
- #【Python】【demo实验23】【练习实例】【 三人比赛顺序问题 】
原题: 两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已抽签决定比赛名单.有人向队员打听比赛的名单.a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单. 我的 ...
- 打印 request 请求中的参数
@SuppressWarnings({"rawtypes"})private void showParams(HttpServletRequest request) { Map&l ...
- React Native 中 component 生命周期
React Native 中 component 生命周期 转自 csdn 子墨博客 http://blog.csdn.net/ElinaVampire/article/details/518136 ...
- Win7 Eclipse 搭建spark java1.8环境:WordCount helloworld例子
[学习笔记] Win7 Eclipse 搭建spark java1.8环境:WordCount helloworld例子在eclipse oxygen上创建一个普通的java项目,然后把spark-a ...
- 【Funny Things】002——鞋的颜色
网上的那张鞋子的图片到底是什么颜色的?灰绿色还是粉色? 1. 先截取图片中鞋的那块的图片,获取大小 2. 带入大小分别计算R,G,B平均值 3. 通过计算所得的数据画图可得结果 from PIL im ...
- Vue.js + Element.ui 从搭建环境到打包部署
一.搭建环境 由于新的node已经集成了npm,所以直接安装node,前往node官网下载最新版本的node,根据自己的操作系统选择相应的包,按照步骤一步步走就可以,这里不做过多介绍. 安装好后可以打 ...
- TypeScript的变量声明
1.全新的变量声明方式 let和const是JavaScript ES6中新添加的变量声明方式.let在很多方面与var是相似的,但是它可以避免一些在JavaScript里常见一些问题. 而const ...
- Mysql定时备份[Windows]
基于mysql5.6.39版本 一.备份脚本 1.windows环境创建批处理文件 @echo off rem ******MySQL backup start****** set mysqlHome ...
- YoloV3 训练崩溃
经过排查 发现是这里出了问题 然后发现是标注文件里有 x=0 y=0 这样的数据,46_Jockey_Jockey_46_576.txt , 那么肯定是标注文件出了问题!! 删除该标注文件即可. ...
- Windows 软件使用
1.CMD 1. 查看端口对应进程 netstat -ano|findstr "443" 2.通过PID 查找对应进程 tasklist|findstr “<PID号> ...