HDU_1072_Nightmare
题目: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的更多相关文章
- hdu_1072_Nightmare(BFS)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1072 题意:给你一个地图,让你在炸弹爆之前找到出口,最初炸弹设定为6,每走一格需要1,中途有地方能让炸 ...
随机推荐
- Android基础新手教程——4.3.1 BroadcastReceiver牛刀小试
Android基础新手教程--4.3.1 BroadcastReceiver牛刀小试 标签(空格分隔): Android基础新手教程 本节引言 本节我们将来学习Android四大组件中的第三个:Bro ...
- HTML5----CSS3图片滤镜(filter)特效
支持Chrome: 暂不支持浏览器:FF,IE... 希望后者努力 效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGFteXM=/font/5a ...
- git基础之创建ssh公钥和密钥
用git管理过程中,不想每次输入username和password.解决的方法例如以下; 1 . 链接换成ssh协议. 2 . 生成公钥. 3. 加入ssh公钥到gitserver. 打开gitbas ...
- HDU 1226 超级password
跟POJ 1465 multiple 类是.仅仅只是多了2个条件,长度不能超过500.还有就是 可能不是十进制. bfs+同余定理,就是用 mod 来判重. G++ 15ms 每次枚举一位,然后记录下 ...
- MySQL系列:innodb源代码分析之内存管理
在innodb中实现了自己的内存池系统和内存堆分配系统,在innodb的内存管理系统中,大致分为三个部分:基础的内存块分配管理.内存伙伴分配器和内存堆分配器.innodb定义和实现内存池的主要目的是提 ...
- PH_Pooled Featrues Classification MIREX 2011 Submission
Abstract Principal Mel-Spectrum Components (Feature) Temporal Pooling Functions (Model) Single Hidde ...
- IE7下兼容问题总结
1.<LI> border-bottom 不显示 解决办法 加个height:100%; 2.border:none;不好使,要用 border:0;
- PHP MySQL mysql.sock的问题
SQLSTATE[HY000] [2002] No such file or directory 原因是找不到mysql.sock这个文件..一般出现的症状就是能用ip连接mysql.但不能使用loc ...
- POJ 2629:Common permutation
Common permutation Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5510 Accepted: 168 ...
- Bing必应地图中国API - 添加实时交通信息
Bing必应地图中国API - 添加实时交通信息 2011-05-24 14:44:58| 分类: Bing&Google|字号 订阅 2009年4月23日,微软必应地图中国API新 ...