[P1363] 幻想迷宫
题目链接
很好的一道搜索题,应该是利用了离散化的思想我好蒟蒻呀
地图是根据给定的图无限的拼接的。
所以说暴力建图是不可取的。
其实不难看出,在跨越两张图时。我们就可以看做这个点时空穿梭一般。从底下回来了。
所以只用在原图上跑dfs觉可以了。
那怎么判断是否在同一张图内被遍历了呢?
又这么判断同一个点在不同的图中是否被遍历了呢?
我们可以将他最近被遍历的原坐标(在无限的地图中的坐标)记录下来
、
如果一个点在一次被遍历时,如果这个点上一次被遍历到时的原坐标不等于现在的坐标。那么就找到了解
很好的题
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
bool map[1600][1600];
bool found;
int vis[1600][1600][2];
bool used[1600][1600];
int n,m;
int dx[4]={0,0,-1,1};
int dy[4]={-1,1,0,0};
int turn[2]={1,0};
void dfs(int x,int y,int rx,int ry)
{if(used[x][y]&&(vis[x][y][0]!=rx||vis[x][y][1]!=ry)){found=true;return ;}if(used[x][y]&&vis[x][y][0]==rx&&vis[x][y][1]==ry)return ;used[x][y]=true;vis[x][y][0]=rx;vis[x][y][1]=ry;int x1,y1,x2,y2;for(int i=0;i<=3;i++){x1=x+dx[i];x2=rx+dx[i];y1=y+dy[i];y2=ry+dy[i];if(x1>n) x1-=n;if(x1<1) x1+=n;if(y1>m) y1-=m;if(y1<1) y1+=m;if(map[x1][y1])dfs(x1,y1,x2,y2);if(found)return ;}
}
int main()
{cin.sync_with_stdio(false);char in;int begin,end;while(cin>>n>>m){memset(map,0,sizeof(map));memset(vis,0,sizeof(vis)); memset(used,0,sizeof(used));for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){cin>>in;switch(in){case 'S':begin=i;end=j;map[i][j]=true;break;case '.':map[i][j]=true;break;case '#':map[i][j]=false;break;}}dfs(begin,end,begin,end);if(found)cout<<"Yes"<<endl;elsecout<<"No"<<endl;found=false;}
}
转载于:https://www.cnblogs.com/Lance1ot/p/8575944.html
[P1363] 幻想迷宫相关推荐
- 伪题解 洛谷 P1363 幻想迷宫(DFS)
毒瘤题,做了一晚上抄题解A了 因为是抄题解,我也不好意思说什么了,就发篇博客纪念一下吧 #include<iostream> #include<cstring> #includ ...
- 洛谷P1363 幻象迷宫(DFS)
输入样例#1: 5 4 ##.# ##S# #-# #.## #-# 5 4 ##.# ##S# #-# -#. #.## 输出样例#1: Yes No 大概就是说给出一个01迷宫类的地图,按照这个地 ...
- 【洛谷】P1363 幻象迷宫
幻象迷宫可以认为是无限大的,不过它由若干个N*M的矩阵重复组成.矩阵中有的地方是道路,用'.'表示:有的地方是墙,用'#'表示.LHX和WD所在的位置用'S'表示.也就是对于迷宫中的一个点(x,y), ...
- 洛谷P1363幻象迷宫
问题描述 (喵星人LHX和WD同心协力击退了汪星人的入侵,不幸的是,汪星人撤退之前给它们制造了一片幻象迷宫.) WD:呜呜,肿么办啊-- LHX:momo...我们一定能走出去的! WD:嗯,+U+U ...
- 洛谷 1363【幻想迷宫】
(其实我不知道算原创还是转载) 题目大意: 现有一个无限大的迷宫,是由无限个n*m的相同矩阵单位组成的,迷宫中有路和墙.给出这个矩阵单位和起点,问能不能走到离起点无穷远的地方. 这题题目还是看懂了,但 ...
- 【Luogu1363】幻想迷宫
problem solution codes //语文题,这很好 last submit #include<iostream> #include<cstring> using ...
- DFS + BFS + 洛谷题
DFS 经典的迷宫问题( 回溯 问题 ) 在起点处有四个方向,上下左右, 走到终点之后,要再返回,看有没有其他更短的路径. 回溯过程,退回之后,要标记该点的值为没有访问过. 直到找到最短的路径. 左右 ...
- 淘汰赛表格制作_2011年电子表格日挑战赛
淘汰赛表格制作 It's hard to believe that a year has passed already, and it's only a week until Spreadsheet ...
- kof97 逆向分析_指令输入系统
I/O 指令输入系统 1.在主循环中通过0x30000和0x340000找到0x9F68 0x9F68 翻译 UpdateP1P2KeyState 0x9F68是从IO的0x300000.0x3400 ...
最新文章
- MySQL said: Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen
- freertos 定时器 不启动_FreeRTOS 从入门到精通8--软件定时器应用
- 删除A数据表中的一行数据时,不小心将表名写成了B,现在想恢复B中刚删除的的着一行数据怎么办...
- charles抓包ios抓拍教程
- TensorFlow实验(3)
- 吴恩达机器学习练习4:神经网络学习(损失函数和正则化)
- java se拖动插件_JQuery之拖拽插件
- 如何提取左声道音频_TRS? TRRS? 正式录制前,您确保麦克风的音频线插对了吗?...
- java中final用法
- 智能优化算法:细菌觅食优化算法 - 附代码
- c语言题目详解——打印3的倍数的数
- 标准误(Standard Error)
- 【推荐】超级好用的打印插件Lodop使用笔记 动态赋值 打印模板解决方案
- 如何快速查看电脑的IP和MAC
- Linux使用alias设置命令别名
- diagrams 一个完全可以代替visio的软件
- 代谢组学结果在线分析:不同组差异代谢物高级韦恩图Venn的绘制——UpSet图
- Word 表格顶页 处理办法
- MRCC和SRCC的理解
- windows7系统无法开机显示丢失volmgrx.sys驱动文件