题目: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 ;
}

最新文章

  1. On having layout
  2. mysql 数据库迁移
  3. JAVA的初始化顺序(续)
  4. 2015安徽省赛 D.锐雯上单不给就送
  5. 0422 数学口袋精灵app
  6. 如果公司里有上百个表要做触发器,如果手动写代码的话。很累,所以今天写了一个小程序,自动生成mysql的触发代码。
  7. Uestc_suibian 暑假集训总结
  8. 梳理下phpmyadmin改root密码后登录不上的问题。
  9. JS Bin Tips and Bits • About
  10. Python 2.7 Exception格式化工具
  11. 201521123054 《Java程序设计》 第2周学习总结
  12. MSSQL---extents
  13. SpringMVC:数据绑定入门(二)
  14. Nordic官网/Infocenter/Devzone/Github简介
  15. python flask 如何修改默认端口号
  16. 背水一战 Windows 10 (117) - 后台任务: 后台下载任务
  17. 5.27 Test
  18. LEAPMOTION开发UI专题(1)
  19. 在javascript中toString 和valueOf的区别
  20. jQuery将时间转化为时间戳或将时间戳转化为时间

热门文章

  1. 【Hibernate学习】 ——ORM(一)
  2. Java算法-奇怪的分式
  3. vue之父子组件之间的通信方式
  4. javascript的继承方法
  5. 图像处理之基础---yuv420及其rgb,bayer, yuv, RGB的相互转换详解
  6. 跟踪oracle中sql语句运行过程及相关知识拓展
  7. IIS6下PHP配置(转载)
  8. 蓝桥 PREV-34 历届试题 矩阵翻硬币
  9. hdoj--1877--又一版 A+B(水题)
  10. 英式英语 vs 美式英语