传送门

题意

给出一张n*m的图

0.墙

1.可走之路

2.起始点

3.终点

4.时间重置点

问是否能到达终点

分析

我的训练专题第一题,一开始我设个vis数组记录,然后写炸,不能处理重置点根vis的关系,然后看了iaccepted这篇blog,换了一种思路,加了一个很好的剪枝,0ms过,足可显示我的搜索思想差、实现差,切记!切记!

trick

1.dfs不能保证最先到达终点的为最短距离,不能打标记

2.剪枝说明:如果当前到达该点时间少于该点剩余时间并且步数大于该点步数,则返回

代码

#include<cstdio>
#define F(i,a,b) for(int i=a;i<=b;++i)
#define R(i,a,b) for(int i=a;i<b;++i)
inline int min(int x,int y){ return x<y?x:y; }
int t,n,m,a[10][10],sx,sy,time[10][10],step[10][10];
int b[4][2]={1,0,0,-1,-1,0,0,1},ans;
bool check(int x,int y)
{
if(x<1||x>n||y<1||y>m||a[x][y]==0) return 0;return 1;
}
void dfs(int x,int y,int num,int st)
{
if(check(x,y)==0) return ;
if(num<=0) return ;
if(a[x][y]==3) { ans=min(ans,st);return ; }
if(a[x][y]==4) num=6;
if(num<=time[x][y]&&step[x][y]<=st) return ;
// printf("x=%d y=%d\n",x,y);
time[x][y]=num;step[x][y]=st;
R(i,0,4)
{
int xx=x+b[i][0],yy=y+b[i][1];
dfs(xx,yy,num-1,st+1);
}
}
int main()
{
for(scanf("%d",&t);t--;)
{
scanf("%d %d",&n,&m);
F(i,1,n)F(j,1,m)
{
scanf("%d",&a[i][j]);
if(a[i][j]==2) sx=i,sy=j;
step[i][j]=100;time[i][j]=0;
}
ans=100;dfs(sx,sy,6,0);
if(ans!=100) printf("%d\n",ans);
else puts("-1");
}
}

HDU1072:Nightmare的更多相关文章

  1. HDU-1072 Nightmare (bfs+贪心)

    Nightmare Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Sub ...

  2. HDU1072 Nightmare(BFS) 2016-07-24 14:02 40人阅读 评论(0) 收藏

    Nightmare Problem Description Ignatius had a nightmare last night. He found himself in a labyrinth w ...

  3. HDU1072:Nightmare [DFS]

    题目链接:Nightmare 题意: 给出一张n*m的图,0代表墙,1代表可以走,2代表起始点,3代表终点,4代表炸弹重置点 问是否能从起点到达终点 分析: 一道很好的DFS题目,炸弹重置点必然最多走 ...

  4. hdu1072(Nightmare)bfs

    Nightmare Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  5. Nightmare HDU1072

    非常标准的BFS 第一次写错了很多 1.到达4时设置为墙就好了  避免了死循环 2.不用开d数组   在结构体里面就行了 3.结构体初始化函数的写法: Node(int x=0,int y=0,int ...

  6. Nightmare(DFS)

    Nightmare    hdu1072 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  7. HDU 1072 Nightmare

    Description Ignatius had a nightmare last night. He found himself in a labyrinth with a time bomb on ...

  8. Nightmare基于phantomjs的自动化测试套件

    今天将介绍一款自动化测试套件名叫nightmare,他是一个基于phantomjs的测试框架,一个基于phantomjs之上为测试应用封装的一套high level API.其API以goto, re ...

  9. POJ 1984 Navigation Nightmare 带全并查集

    Navigation Nightmare   Description Farmer John's pastoral neighborhood has N farms (2 <= N <= ...

随机推荐

  1. linux date 格式化时间和日期

    [root@108test ~]# date -d today +"%Y-%m-%d" 2008-05-07   [root@108test ~]# date -d today + ...

  2. typeof、constructor和instanceof

    在JavaScript中,我们经常使用typeof来判断一个变量的类型,使用格式为:typeof(data)或typeof data.typeof返回的数据类型有六种:number.string.bo ...

  3. jxls使用模版导出Excel

    /**     * 使用模版导出Excel     */    @SuppressWarnings({ "unchecked", "deprecation" } ...

  4. ASP.NET Core小技巧

    设定开发环境为开发模式,呈现具体错误内容 dotnet run启动时,会在环境变量中查找ASPNETCORE_ENVIRONMENT变量的值,如果没有,则默认会当做Production来处理,隐藏错误 ...

  5. poj 3041——Asteroids

    poj       3041——Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22604   Accep ...

  6. weblogic线程阻塞性能调优(图解)

    转自:http://blog.csdn.net/z69183787/article/details/12647539 声明:出现这个问题有程序方面.网络方面.weblogic设置方面等等原因,此文章主 ...

  7. IPTABLES基本例子

    iptables –F #删除已经存在的规则 iptables -P INPUT DROP #配置默认的拒绝规则.基本规则是:先拒绝所有的服务,然后根据需要再添加新的规则. iptables -A I ...

  8. win8 metro 自己写摄像头录像项目

    这是要求不适用CameraCaptureUI等使用系统自带的 camera  UI界面.要求我们自己写调用摄像头摄像的方法,如今我把我的程序贴下: UI界面的程序: <Page x:Class= ...

  9. 基于空间直方图meanshift跟踪

    近期看了一篇文章<spatiograms versus histograms for region-based tracking>,在此把这篇文章的核心思想及算法推理进行整理. 空间直方图 ...

  10. serverSpeed是一个android手机端到服务器间udp/tcp对比测速软件

    https://github.com/eltld/serverSpeed https://github.com/c-wind/serverSpeed https://github.com/PeterK ...