题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1728

解题方法:BFS+访问数组vis[][];

给你起点位置和终点位置,让你判断能不能到达,并且拐弯数不能超过某个值。

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<queue>
using namespace std; //int dx[]={0,0,-1,1};
//int dy[]={1,-1,0,0};
int dir[][] = { , , -, , , , , - };
char map[][];
int vis[][];
int m,n;
int k; struct point
{
int x;
int y;
int kk;
}; void bfs(point s,point u)
{
int flag=;
point q,p;
s.kk=-; //(新增)-1,不是0 vis[s.x][s.y]=; //(新增)访问的标志 queue<point>tp;
tp.push(s); while(!tp.empty ())
{
q=tp.front();
tp.pop(); if(q.x==u.x&&q.y==u.y&&q.kk<=k) //(新增)q.kk<=k
{
flag=;
break;
} int i;
p.kk=q.kk+; //(新增)
for(i=;i<;i++)
{
p.x=q.x+dir[i][];//p.x=q.x+dx[i];
p.y=q.y+dir[i][];//p.y=q.y+dy[i]; while(p.x>=&&p.x<m&&p.y>=&&p.y<n&&map[p.x][p.y]!='*') //(新增)搜索完一个方向
{
if(!vis[p.x][p.y])
{
vis[p.x][p.y]=;
tp.push(p);
}
p.x+=dir[i][];//p.x+=dx[i]; //(新增)
p.y+=dir[i][];//p.y+=dy[i]; //(新增)
} } }
if(flag)
{
cout<<"yes\n";
}
else
{
cout<<"no\n";
}
} int main()
{
int t;
cin>>t;
while(t--)
{
cin>>m>>n;
for(int i=;i<m;i++)
{
for(int j=;j<n;j++)
{
cin>>map[i][j];
}
} point s,u;
cin>>k>>s.y>>s.x>>u.y>>u.x; s.y--;s.x--;u.y--;u.x--; memset(vis,,sizeof(vis)); //(新增)初始化访问标志的数组
bfs(s,u);
}
}

相关链接:http://blog.csdn.net/zhuhuangjian/article/details/8262561

走迷宫(二):在XX限制条件下,是否走得出的更多相关文章

  1. 走迷宫(三):在XX限制条件下,是否走得出。

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010 题目前提条件:让你输入一个数组,包含一个起点S,一个终点D,一个时间T.(其中X代表墙,.代表此 ...

  2. P1102 走迷宫二

    题目描述 大魔王抓住了爱丽丝,将她丢进了一口枯井中,并堵住了井口. 爱丽丝在井底发现了一张地图,他发现他现在身处一个迷宫当中,从地图中可以发现,迷宫是一个N*M的矩形,爱丽丝身处迷宫的左上角,唯一的出 ...

  3. 走迷宫(用队列bfs并输出走的路径)

    #include <iostream> #include <stack> #include <string.h> #include <stdio.h> ...

  4. # Volley源码解析(二) 没有缓存的情况下直接走网络请求源码分析#

    Volley源码解析(二) 没有缓存的情况下直接走网络请求源码分析 Volley源码一共40多个类和接口.除去一些工具类的实现,核心代码只有20多个类.所以相对来说分析起来没有那么吃力.但是要想分析透 ...

  5. 一本通之 一堆迷宫 (Dungeon Master&走出迷宫&走迷宫)

    一本通在线崩溃....... . 有图有真相 这是个三维迷宫,其实和二位迷宫差不多,只是方向多加了2个. 但这个题的输入十分恶心,一度被坑的用cin.ignore(),但还是不过... 它的正确输入方 ...

  6. C语言动态走迷宫

    曾经用C语言做过的动态走迷宫程序,先分享代码如下: 代码如下: //头文件 #include<stdio.h> #include<windows.h>//Sleep(500)函 ...

  7. golang广度优先算法-走迷宫

    广度优先遍历,走迷宫思路: 1.创建二维数组,0表示是路,1表示是墙:创建队列Q,存储可遍历的点,Q的第一个元素为起始点 2.从队列中取一个点,开始,按上.左.下.右的顺序遍历周围的点next,nex ...

  8. 洛谷——P1238 走迷宫

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

  9. 用Q-learning算法实现自动走迷宫机器人

    项目描述: 在该项目中,你将使用强化学习算法,实现一个自动走迷宫机器人. 如上图所示,智能机器人显示在右上角.在我们的迷宫中,有陷阱(红色炸弹)及终点(蓝色的目标点)两种情景.机器人要尽量避开陷阱.尽 ...

随机推荐

  1. if __name=='__main__"的作用

    1.__main__的作用 我们可以经常在不同的程序和脚本中看到有这样的代码: if __name__=='__main__':#如果在windows上启动线程池,必须要使用. func() 很多情况 ...

  2. POJ1651:Multiplication Puzzle(区间dp)

    Multiplication Puzzle Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9419 Accepted: 5850 ...

  3. Kudu,支持快速分析的新型Hadoop存储系统

    Kudu是Cloudera开源的新型列式存储系统,是Apache Hadoop生态圈的新成员之一(incubating),专门为了对快速变化的数据进行快速的分析,填补了以往Hadoop存储层的空缺.本 ...

  4. 【10月新版】Aspose.Pdf 10月新版V17.10发布 | 附下载

    2019独角兽企业重金招聘Python工程师标准>>> Aspose.Pdf for .NET 17.10 更新 功能和改进 核心 概述 类别 PDFNET-38067 支持DICO ...

  5. 12c DG broker DMON自动重启过程分析

    一.知识点 1.强烈建议大家管理dataguard使用broker. 2.broker的日志要知道在哪里,会看日志是学习的第一步. 3.体系结构需要看官方文档. 二.测试过程 1.查看DMON进程 & ...

  6. MySQL 数据库赋权

    1.进入数据库,查看数据库账户 # 进入数据库 mysql –u root –p ---> 输入密码... # 使用 mysql 库 use mysql; # 展示 mysql 库中所有表 sh ...

  7. C++ 函数重载,函数模板和函数模板重载,选择哪一个?

    重载解析 在C++中,对于函数重载.函数模板和函数模板重载,C++需要有一个良好的策略,去选择调用哪一个函数定义(尤其是多个参数时),这个过程称为重载解析. (这个过程将会非常复杂,但愿不要遇到一定要 ...

  8. Fiddler手机端抓包环境设置与过滤(一)

    一.PC端Fiddler设置 1.安装https 证书 打开Fiddler->Tool->Fiddler Options->HTTPS tab,勾选上并Capture HTTPS C ...

  9. docker部署gitlab

    Docker部署gitlab 一.前提条件 (1)     存在docker (2)     服务器可以联网(外网) (3)     服务器内存至少4G(内存不够会出现502错误) 内存不足502错误 ...

  10. CC2530应用——按键控制灯光状态变化

    独立新建工程并编写.编译代码,实现按键控制灯光闪烁状态的变换,实现以下任务要求:[1]程序开始运行:D4灯闪烁,D3.D5.D6灯熄灭.[2]按下模块上的SW1按键松开后,实现D5.D6灯轮流闪烁.[ ...