题目:http://acm.hdu.edu.cn/showproblem.php?pid=1072

题目描述:矩阵表示迷宫,0表示墙,1表示路,2表示起点,3表示终点,4表示重置炸弹时间(6秒),你需要从起点出发(炸弹初始为6秒),在炸弹爆炸前到达终点,问最少需要多少时间。

分析:dfs,可以走走过的路,所以不能使用vis数组来标记,而是用dis和tim两个数组来帮助判断所走路线,通过这两个数组的记录来剪枝(此处剪枝:当sum大于dis[x][y]且time<=tim[x][y]说明当前这条路并非最佳路线,此处着重理解)。

总结:dfs摸到的些许门道,还需加强,剪枝还需要多见识一些。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
#define INF 100
int map[][];
int dir[][]= {{-,},{,},{,},{,-}};
int dis[][];
int tim[][];
int n,m,minx; bool inside(int x,int y)
{
if(x<n&&x>=&&y<m&&y>=)
return ;
return ;
} void dfs(int x,int y,int time,int sum)
{
if(map[x][y]==&&time>)
{
if(sum<minx)
minx=sum;
return;
}
if(time<=)
return;
if(map[x][y]==)
return;
if(!inside(x,y))
return;
if(time<=tim[x][y]&&sum>=dis[x][y]) //剪枝
return;
if(map[x][y]==)
time=;
dis[x][y]=sum;
tim[x][y]=time;
for(int i=; i<; i++)
{
int mx=x+dir[i][];
int my=y+dir[i][]; dfs(mx,my,time-1,sum+1);
}
} int main()
{
int t,sx,sy,ex,ey;
scanf("%d",&t);
while(t--)
{
memset(tim,,sizeof(tim));
minx=INF;
scanf("%d%d",&n,&m);
for(int i=; i<n; i++)
for(int j=; j<m; j++)
dis[i][j]=INF;
for(int i=; i<n; i++)
for(int j=; j<m; j++)
{
scanf("%d",&map[i][j]);
if(map[i][j]==)
{
sx=i;
sy=j;
}
}
dfs(sx,sy,,);
if(minx!=INF)
printf("%d\n",minx);
else
printf("-1\n");
}
return ;
}

HDU_1072_Nightmare的更多相关文章

  1. hdu_1072_Nightmare(BFS)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1072 题意:给你一个地图,让你在炸弹爆之前找到出口,最初炸弹设定为6,每走一格需要1,中途有地方能让炸 ...

随机推荐

  1. Boss OpenCart 商城自适应主题模板 ABC-0012-01

    Boss OpenCart 商城自适应主题模板 ABC-0012-01 模板特性兼容浏览器IE7, IE8, IE9, IE10, Firefox, Safari, Chrome OpenCart版本 ...

  2. simple-framework(MaliSDK框架分析)

    simple-framework(Mali SDK框架分析) 1.全部的定义及实现放在同一个命名空间中.文件包括#include一般在命名空间的外面. 总的命名空间为namespace MaliSDK ...

  3. gcc优化选项解析

    1 -fno-defer-pop 函数返回的时候,就立即将栈里面放置的该函数的参数pop出来.这样可以避免函数参数占用过多的栈空间. 2 -fforward-propagate ? 3 -ffp-co ...

  4. QVariant(相当于是Java里面的Object,是万能的容器,但要注册)

    这个类型相当于是Java里面的Object,它把绝大多数Qt提供的数据类型都封装起来,起到一个数据类型“擦除”的作用.比如我们的 table单元格可以是string,也可以是int,也可以是一个颜色值 ...

  5. HTTP要点概述:五,HTTP的无状态性,持久连接,Cookie

    一,HTTP的无状态性: HTTP 是一种不保存状态,无状态(stateless)协议.HTTP 协议自身不对请求和响应之间的通信状态进行保存.也就是说在 HTTP 这个级别,协议对于发送过的请求或响 ...

  6. centos7 安装8188eu驱动小记

    最小化安装把lsusb和lspci装上 使用lsusb 和lspci的命令, centos上的安装命令: yum -y install usbutils yum -y install pciutils ...

  7. RK3288获取摄像头的Sensor ID【原创】

    平台信息:内核:linux3.0.68 系统:android/android6.0平台:RK3288 作者:庄泽彬(欢迎转载,请注明作者) 邮箱:2760715357@qq.com 说明:通过I2C总 ...

  8. 在java中除去字符串(String)中的换行字符(\r \n \t)

    我们先来看几个例子: 例1: public class Test { public static void main(String[] args) { String s = "'sds gd ...

  9. go语言---map

    go语言---map https://blog.csdn.net/cyk2396/article/details/78890185 一.map的用法: type PersonDB struct { I ...

  10. WPF获取原始控件样式

    要获取WPF控件的原始样式,需要我们安装Blend for Visual Studio. 然后,我们打开Blend for Visual Studio,创建一个WPF项目. 然后,我们向页面拖动一个B ...