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

题目前提条件:让你输入一个数组,包含一个起点S,一个终点D,一个时间T。(其中X代表墙,.代表此地可行。)

题目要求:在规定的第T秒,问你是否能够走出迷宫。(每走一步耗时1s)。

解题方法:DFS+vis[][]+flag+(新技巧)奇偶剪枝。

#include<iostream>
#include<string.h>
#include<cmath>;
using namespace std;char map[8][8];
int vis[8][8];  //(新增)访问标记的数组
int N,M,T;
int sx,dx,sy,dy;
int flag;      //(新增)判断状态
int k;         //(新增)记录障碍物的个数int abs(int a,int b)
{if(a<b){return b-a;}else{return a-b;}
}void dfs(int x,int y,int dep)   //void()函数内使用“return;”表示跳出此函数。
{if(dep>T)                       {return ;            }if(x<0||x>=N||y<0||y>=M)     {return ;}if(flag)                       {return;}if(map[x][y]=='D'&&dep==T)    {flag=1;return ;}int temp=abs(x-dx)+abs(y-dy); //(新增)奇偶剪枝temp=T-temp-dep;if(temp&1)                    //if(走不下去了)
    {return;}//枚举下一种情况,DFS(...,dep+1);if(!vis[x-1][y]&&map[x-1][y]!='X')    //(新增)if(下一个点满足的情况)
   {vis[x-1][y]=1;    dfs(x-1,y,dep+1);vis[x-1][y]=0;     }if(!vis[x+1][y]&&map[x+1][y]!='X')   //(新增)if(下一个点满足的情况)
   {vis[x+1][y]=1;   dfs(x+1,y,dep+1);vis[x+1][y]=0;   }if(!vis[x][y-1]&&map[x][y-1]!='X')   //(新增)if(下一个点满足的情况)
   {vis[x][y-1]=1; dfs(x,y-1,dep+1);vis[x][y-1]=0;   }if(!vis[x][y+1]&&map[x][y+1]!='X')   //(新增)if(下一个点满足的情况)
   {vis[x][y+1]=1;   dfs(x,y+1,dep+1);vis[x][y+1]=0;   }}int main()
{while(cin>>N>>M>>T){if(N==0&&M==0&&T==0){break;}k=0;         memset(vis,0,sizeof(vis));   //(新增)访问标记数组的初始化。for(int i=0;i<N;i++){for(int j=0;j<M;j++){cin>>map[i][j];if(map[i][j]=='S'){sx=i;sy=j;vis[i][j]=1;  //(新增)给起点作“已访”标记
                }if(map[i][j]=='D'){dx=i;dy=j;}if(map[i][j]=='X')           {k++;  //(新增)记录障碍物的个数
                }}}flag=0;  //(新增)初始状态为false;if(N*M-k-1>=T)       //(新增)T+k+1(起点S的位置)必须 <=   N*M(总的格子数)
        {dfs(sx,sy,0);}if(flag){cout<<"YES\n";}else{cout<<"NO\n";}}
}

转载于:https://www.cnblogs.com/Strugglinggirl/p/6119666.html

走迷宫(三):在XX限制条件下,是否走得出。相关推荐

  1. C语言 老鼠走迷宫详解6,算法: Mazing-老鼠走迷宫

    说明 老鼠走迷宫是递回求解的基本题型.我们在二维阵列中使用 2 表示迷宫墙壁,使用 1 来表示老鼠的行走路径,尝试以程式求由入口至出口的路径. 解法 老鼠可走上,下,左,右四个方向.入口一般在左上,出 ...

  2. c语言大作业走迷宫,基于C语言实现简单的走迷宫游戏

    本文实例讲述了C语言实现简单的走迷宫游戏的方法,代码完整,便于读者理解. 学数据结构时用"栈"写的一个走迷宫程序,实际上用到双向队列,方便在运行完毕后输出经过的点. #includ ...

  3. fla 走迷宫游戏 源码_迷宫新玩法,果断一试

    迷宫, 真的是谜一样的存在, 大到几十岁的成年人, 小到三岁小儿, 都对其没有抵抗力. 而迷宫君也是真给力, 除了能给人带来愉悦感与成就感, 还能同时锻炼专注力.空间感.思维力.视觉追踪等, 是儿童感 ...

  4. 无脑单细胞竟会走迷宫、规划交通路线,这种难以归类的生物重定义了智能

    本文转载自公众号SME 在电子游戏的一般套路设定下,蠢萌的史莱姆总是那个最低级的怪物. 它们几乎没有智商可言,攻击手段单一且总是以动技能著称,正所谓"烂泥扶不上壁". 而纵观各个类 ...

  5. 走迷宫-双向bfs解法

    双向bfs适用于知道起点和终点的状态下使用,从起点和终点两个方向开始进行搜索,可以非常大的提高单个bfs的搜索效率 同样,实现也是通过队列的方式,可以设置两个队列,一个队列保存从起点开始搜索的状态,另 ...

  6. 广度优先算法_算法浅谈——走迷宫问题与广度优先搜索

    本文始发于个人公众号:TechFlow,原创不易,求个关注 在之前周末LeetCode专栏当中,我们详细描述了深度优先搜索和回溯法,所以今天我们继续这个话题,来和大家聊聊搜索算法的另一个分支,广度优先 ...

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

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

  8. 【华为机试】【校招】【Java】机器人走迷宫(DFS)

    ■ 题目描述 [机器人走迷宫] 机器人走一个迷宫,给出迷宫的x和y(x*y的迷宫)并且迷宫中有障碍物,输入k表示障碍物有k个,并且会将障碍物的坐标挨个输入. 机器人从0,0的位置走到x,y的位置并且只 ...

  9. 华为机试二星题--机器人走迷宫

    题目 机器人走一个迷宫,给出迷宫的x和y(x*y的迷宫)并且迷宫中有障碍物,输入k表示障碍物有k个,并且会将障碍物的坐标挨个输入. 机器人从0,0的位置走到x,y的位置并且只能向x,y增加的方向走,不 ...

  10. LRU算法,走迷宫,数根,星际战争

    问答题1 问答题1:一进程刚获得三个主存块的使用权,若该进程访问页面的次序是{1321215123},采用 LRU 算法,缺页数是几次? LRU 算法是先置换出不常用的页面,如果一个页面刚刚被访问过, ...

最新文章

  1. mxnet中的SoftmaxCrossEntropyLoss损失函数
  2. php找不到控制器里面的方法,php – 在Laravel 4中找不到控制器类
  3. python返回unicode_我们如何从python中的字形id获取unicode?
  4. C# 5.0新加特性
  5. React开发(257):react项目理解 ant design model提示问题
  6. linux yum仓库制作,yum仓库搭建之RPM包制作
  7. 1.4.5 动态字段
  8. IT软件开发人员必去的10个社区
  9. Multisim 编码器 译码器 74LS138 74LS148
  10. CDQZ_Training 2012-5-10 舞蹈课
  11. IDEA告警:Field can be converted to a local varible
  12. GIS制作色斑图(等值面图)保姆级指导0基础小白
  13. 梅赛德斯-奔驰集结全球、中国首秀和上市车型亮相2023上海车展
  14. 微型计算机ccc认证依据,3C检测规定
  15. gitpush出现remote: Support for password authentication was removed on August 13, 2021.
  16. 将灰度图片转成三通道(RGB)图片(MatLab)
  17. linux服务器http进程CPU异常飙高(轮为免费矿工)
  18. WIN 8 安装PL2303驱动
  19. Mathtype安装失败,卡在安装字体后闪退,不显示安装成功的解决
  20. dSPACE学习笔记1

热门文章

  1. 常见Linux发行版本(转载)
  2. C++ 智能指针shared_ptr、weak_ptr的简单实现
  3. MapReduce官方案例wordcount
  4. mysql 安装no key_No package mysql-server available错误解决(centos mysql安装教程)
  5. python word转pdf linux_linux环境基于python语言docx转pdf
  6. 学生信息管理系统(附运行效果图和源码下载)分页技术(后台封装json数据传递到前端显示,动态分页等)(Mybatis,json,ajax,jQuery实用整合示例)
  7. Java编程:栈的应用实例——简单的综合计算器实现(中缀表达式)
  8. 51单片机C语言堆栈,《单片机C语言试题》(一)20101027
  9. Echarts数据可视化特效散点图点动态闪烁效果
  10. 《高效能程序员的修炼》——程序员的八种境界