[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;
else
cout<<"No"<<endl;
found=false;
}
}
[P1363] 幻想迷宫的更多相关文章
- 【洛谷】【搜索(dfs)】P1363 幻想迷宫
[题目描述:] 幻象迷宫可以认为是无限大的,不过它由若干个N*M的矩阵重复组成.矩阵中有的地方是道路,用'.'表示:有的地方是墙,用'#'表示.LHX和WD所在的位置用'S'表示.也就是对于迷宫中的一 ...
- 洛谷 P1363 幻想迷宫 解题报告
P1363 幻想迷宫 题目描述 背景 Background (喵星人LHX和WD同心协力击退了汪星人的入侵,不幸的是,汪星人撤退之前给它们制造了一片幻象迷宫.) WD:呜呜,肿么办啊-- LHX:mo ...
- 络谷 P1363 幻想迷宫
P1363 幻想迷宫 题目描述 背景 Background (喵星人LHX和WD同心协力击退了汪星人的入侵,不幸的是,汪星人撤退之前给它们制造了一片幻象迷宫.) WD:呜呜,肿么办啊…… LHX:mo ...
- 洛谷P1363 幻想迷宫
题目描述 背景 Background (喵星人LHX和WD同心协力击退了汪星人的入侵,不幸的是,汪星人撤退之前给它们制造了一片幻象迷宫.) WD:呜呜,肿么办啊…… LHX:momo...我们一定能走 ...
- 洛谷 P1363 幻想迷宫
题目描述 背景 Background (喵星人LHX和WD同心协力击退了汪星人的入侵,不幸的是,汪星人撤退之前给它们制造了一片幻象迷宫.) WD:呜呜,肿么办啊…… LHX:momo...我们一定能走 ...
- 洛谷P1363 幻想迷宫【dfs】
题目:https://www.luogu.org/problemnew/show/P1363 题意: 有一个地图,起点是S,障碍物用#表示.可以将这个地图不断的在四周重复,问从起点开始是否可以走到无限 ...
- 伪题解 洛谷 P1363 幻想迷宫(DFS)
毒瘤题,做了一晚上抄题解A了 因为是抄题解,我也不好意思说什么了,就发篇博客纪念一下吧 #include<iostream> #include<cstring> #includ ...
- 【洛谷 P1363】幻想迷宫(搜索)
这题其实可以很简单. 题目叫做"幻想迷宫",那么我们就幻想一个迷宫. 借用一下@FancyDreams的图片 只有左上角第一个\(5*4\)的迷宫是真的, 其他都是我们幻想出来的. ...
- [LuoguP1363]幻想迷宫
[LuoguP1363]幻想迷宫(Link) 现在有一个迷宫,从迷宫边界的任意一点可以走到对面,即:若都是路面,则可以从\((1, i)\)走到\((N, i)\).其余情况依旧.问是否可以从指定的起 ...
随机推荐
- python django 基本测试 及调试 201812
#####20181225 1.python解决SNIMissingWarning和InsecurePlatformWarning警告在想要获取https站点的资源时,会报出SNIMissingWar ...
- vue vue-resource网络请求
在使用get/post 网络请求,需要下载插件 "vue-resource" npm install vue-resource -s 在路由要导入及注册 import Vue fr ...
- KEIL中头文件使用配置向导
在xxx.h头文件的代码中夹杂的“<h> </h>”.“<o>”“<i>”.“<c1> </c>”和“<e& ...
- [转]Jquery Mobile dialog的生命周期
本文转自:http://www.cnblogs.com/jackhuclan/archive/2012/04/05/2432972.html JQuery Mobile对htm5的移动开发绝对是个好用 ...
- 开发安全的 API 所需要核对的清单
开发安全的 API 所需要核对的清单 以下是当你在设计, 测试以及发布你的 API 的时候所需要核对的重要安全措施. 身份认证 不要使用 Basic Auth 使用标准的认证协议 (如 JWT, OA ...
- php 设置虚拟目录
php 设置虚拟目录两个步骤,很简单. 第一,打开安装apache目录下的conf下面的httpd.conf文件. 找到IfModule 标记, 再它下面添加红色方框中的内容.注意不能少东西. ...
- iOS重用宏定义
iOS 多快好省的宏(转) 原文地址:http://my.oschina.net/yongbin45/blog/150149 // 字符串: #ifndef nilToEmpty #define ni ...
- 基于 MUI 构建一个具有 90 +页面的APP应用
前言 mui是一款接近原生App体验的前端框架,只需要掌握前端技术就可以开发APP应用,官方有提供功能比较全面的demo版本, 但在实战中总会遇到一些不可避免但坑,对于没有接触过mui的开发者,难免会 ...
- TP5.0搭建restful API 应用
1.配置环境变量,如果没配置会显示如下错误. 配置方法 1)右键此电脑-> 属性-> 高级系统设置->环境变量->Path 2)在Path后加上php目录的名称 如:E:\PH ...
- <Android开源库 ~ 1> GitHub Android Libraries Top 100 简介
转载自GitHub Android Libraries Top 100 简介 本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据 GitH ...