题目链接: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[][];
int vis[][]; //(新增)访问标记的数组
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<||x>=N||y<||y>=M)
{
return ;
} if(flag)
{
return;
}
if(map[x][y]=='D'&&dep==T)
{
flag=;
return ;
} int temp=abs(x-dx)+abs(y-dy); //(新增)奇偶剪枝
temp=T-temp-dep;
if(temp&) //if(走不下去了)
{
return;
} //枚举下一种情况,DFS(...,dep+1);
if(!vis[x-][y]&&map[x-][y]!='X') //(新增)if(下一个点满足的情况)
{
vis[x-][y]=;
dfs(x-,y,dep+);
vis[x-][y]=;
}
if(!vis[x+][y]&&map[x+][y]!='X') //(新增)if(下一个点满足的情况)
{
vis[x+][y]=;
dfs(x+,y,dep+);
vis[x+][y]=;
}
if(!vis[x][y-]&&map[x][y-]!='X') //(新增)if(下一个点满足的情况)
{
vis[x][y-]=;
dfs(x,y-,dep+);
vis[x][y-]=;
}
if(!vis[x][y+]&&map[x][y+]!='X') //(新增)if(下一个点满足的情况)
{
vis[x][y+]=;
dfs(x,y+,dep+);
vis[x][y+]=;
} } int main()
{
while(cin>>N>>M>>T)
{
if(N==&&M==&&T==)
{
break;
} k=;
memset(vis,,sizeof(vis)); //(新增)访问标记数组的初始化。 for(int i=;i<N;i++)
{
for(int j=;j<M;j++)
{
cin>>map[i][j];
if(map[i][j]=='S')
{
sx=i;
sy=j;
vis[i][j]=; //(新增)给起点作“已访”标记
}
if(map[i][j]=='D')
{
dx=i;
dy=j;
} if(map[i][j]=='X')
{
k++; //(新增)记录障碍物的个数
}
}
} flag=; //(新增)初始状态为false; if(N*M-k->=T) //(新增)T+k+1(起点S的位置)必须 <= N*M(总的格子数)
{
dfs(sx,sy,);
} if(flag)
{
cout<<"YES\n";
}
else
{
cout<<"NO\n";
} }
}

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

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

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1728 解题方法:BFS+访问数组vis[][]; 给你起点位置和终点位置,让你判断能不能到达,并且拐弯 ...

  2. P1103 走迷宫三

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

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

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

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

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

  5. 洛谷——P1238 走迷宫

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

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

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

  7. 数据结构之递归Demo(走迷宫)(八皇后)(汉诺塔)

    递归 顾名思义,递归就是递归就是递归就是递归就是递归......就是递归 Google递归:

  8. 第四周PTA笔记 好吃的巧克力+特殊的翻译+下次一定(续)+走迷宫

    好吃的巧克力 超市正在特价售卖巧克力,正好被贪吃的Lucky_dog看见了. 巧克力从左到右排成一排,一共有N个,M种. 超市有一个很奇怪的规定,就是你在购买巧克力时必须提供两个数字a和b,代表你要购 ...

  9. C语言动态走迷宫

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

随机推荐

  1. JAVA 之 JSTL

    一.什么是JSTL JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签. ...

  2. XEP-0198:流管理

    ------------恢复内容开始------------ 原文来自:https://xmpp.org/extensions/xep-0198.html,只翻译了技术方面的内容. 摘要:这个规范定义 ...

  3. MFC之动态调用自己写的类库中的类的成员方法

    第一步:创建一个要调用的类库 如果是MFC程序使用,可以创建一个MFC的类库,不过依然可以创建一个win32类库.我所知道的,MFC的类库可以分为常规MFC DLL和MFC扩展DLL关于它们之间的区别 ...

  4. JS面向对象编程之对象

    在AJAX兴起以前,很多人写JS可以说都是毫无章法可言的,基本上是想到什么就写什么,就是一个接一个的函数function,遇到重复的还得copy,如果一不小心函数重名了,还真不知道从何开始查找错误,因 ...

  5. du命令、df命令、磁盘分区

    df:汇报文件系统的磁盘使用空间[root@localhost ~]# df文件系统 1K-块 已用 可用 已用% 挂载点/dev/sda3 29140072 1022920 28117152 4% ...

  6. keep-alive的深入理解与使用(配合router-view缓存整个路由页面)

    原文链接: 点我 在搭建 vue 项目时,有某些组件没必要多次渲染,所以需要将组件在内存中进行‘持久化’,此时 <keep-alive> 便可以派上用场了. <keep-alive& ...

  7. Codeforce 1311A Add Odd or Subtract Even

    Add Odd or Subtract Even time limit per test2 seconds memory limit per test256 megabytes inputstanda ...

  8. bzoj4318 OSU!和bzoj 3450 Tyvj1952 Easy

    这俩题太像了 bzoj 3450 Tyvj1952 Easy Description 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:( 我们来简化一下这个游戏的规则 有n次点 ...

  9. mysql5.7 修改密码,修改权限

    1.修改数据库对指定用户和ip权限 a. IP为192.168.0.1的用户jack拥有对数据库datebase的表table的 增删改查权限, ,连接密码为password grant select ...

  10. 软件——IDEA主题美化

    前言 IntelliJ IDEA主要用于支持 Java.Scala.Groovy 等语言的开发工具,同时具备支持目前主流的技术和框架,擅长于企业应用.移动应用和 Web 应用的开发. IntelliJ ...