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

题目大意:走迷宫。走到装置点重置时间,到达任一点时的时间不能为0,可以走重复路,求出迷宫最短时间。

解题思路

vis的第三维标记一下到这个格子的时间。

尽管可以格子可以重复走,但在相同时间到这个格子是没有意义的。

小心一下时间不能为0的问题就行了。

#include "cstdio"
#include "queue"
#include "cstring"
using namespace std;
struct status
{
int x,y,t,time;
status(int x,int y,int t,int time):x(x),y(y),t(t),time(time) {}
};
int n,m,sx,sy,map[][],dir[][]={,-,,,-,,,};
bool vis[][][];
int bfs(int sx,int sy)
{
queue<status> Q;
vis[sx][sy][]=true;
Q.push(status(sx,sy,,));
while(!Q.empty())
{
status s=Q.front();Q.pop();
for(int i=;i<;i++)
{
int X=s.x+dir[i][],Y=s.y+dir[i][],time;
if(X<||X>n||Y<||Y>m||map[X][Y]==) continue;
if(s.time<=) continue;
if(map[X][Y]==) time=;
else time=s.time-;
if(vis[X][Y][time]) continue;
vis[X][Y][time]=true;
if(map[X][Y]==) return s.t+;
Q.push(status(X,Y,s.t+,time));
}
}
return -;
}
int main()
{
//freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
memset(vis,,sizeof(vis));
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;}
}
int ans=bfs(sx,sy);
printf("%d\n",ans);
}
}
2867257 2015-02-02 00:12:36 Accepted 1072 0MS 1100K 1337 B C++ Physcal

HDU 1072(记忆化BFS)的更多相关文章

  1. HDU 2364 (记忆化BFS搜索)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2364 题目大意:走迷宫.从某个方向进入某点,优先走左或是右.如果左右都走不通,再考虑向前.绝对不能往 ...

  2. HDU 2579 (记忆化BFS搜索)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2579 题目大意:走迷宫.对于障碍点,只有当前(dep+1)%k才能走,问最少时间. 解题思路: 只有 ...

  3. HDU 2653 (记忆化BFS搜索+优先队列)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2653 题目大意:迷宫中有普通点和陷阱.其中普通点可以走可以飞,但是陷阱只能飞.走耗时1,飞耗时2.但 ...

  4. Labyrinth(记忆化BFS)

    Labyrinth http://codeforces.com/problemset/problem/1064/D time limit per test 2 seconds memory limit ...

  5. hdu 4722(记忆化搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4722 思路:简单的记忆化搜索,留意一下A==0时的情况就可以了. #include<iostre ...

  6. HDU 4597 记忆化搜索

    ² 博弈取牌—记忆化搜索 题目描述: 有两副带有数字的牌,(数字>0)两人轮流取,取中了某张牌,自己的分数就加上牌上的数字,但只能从两端取,每人都会用最优的策略使得自己的分数最高.问A先取,他能 ...

  7. hdu 1514 记忆化搜索

    题意是给4堆(堆的高度小于等于40)有颜色(颜色的种类小于等于20)的物品,你有一个篮子最多能装5件物品,每次从这4堆物品里面任取一件物品放进篮子里,但是取每堆物品时,必须先取上面的物品,才能取下面的 ...

  8. hdu 1208 记忆化搜索

    题目大意:只能按照格子上的数字*方向走,从左上走到右下Sample Input42331121312313110Sample Output3 直接记忆化搜索,注意是0的情况 #include<c ...

  9. hdu 4960 记忆化搜索 DP

    Another OCD Patient Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Ot ...

随机推荐

  1. 写了个简单的pdo的封装类

    <?php class PD { //造对象 public $dsn = "mysql:dbname=test2;host=localhost"; //数据库类型,数据库名和 ...

  2. My97DatePicker日期范围限制

    1.动态时间范围限制: 可以通过系统给出的动态变量,如%y(当前年),%M(当前月)等来限制日期范围,还可以通过{}进行表达式运算,如:{%d+1}:表示明天. 格式 说明 %y  当前年 %M  当 ...

  3. Deci and Centi Seconds parsing in java

    http://stackoverflow.com/questions/14558663/deci-and-centi-seconds-parsing-in-java

  4. SQLServer事务

    指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)由多个sql语句组成,必须作为一个整体执行这些sql语句作为一个整体一起向系统提交,要么都执行.要么都不执行 语法步骤:开始事务:BEG ...

  5. acpi参考网站

    1.acpi官网: http://www.acpi.info/

  6. 攻城狮在路上(叁)Linux(十七)--- linux磁盘与文件管理概述

    一.复习知识点: 1.扇区是最小的物理存储单位,大小为512bytes. 2.扇区组成一个圆,成为柱面,柱面是分区的最小单位. 3.第一个扇区很重要,因为包含了MBR(446字节)和分区表(64字节) ...

  7. Web开发基本准则-55实录-Web访问安全

    Web开发工程师请阅读下面的前端开发准则,这是第一部分,强调了过去几年里我们注意到的Web工程师务须处理的Web访问安全基础点.尤其是一些从传统软件开发转入互联网开发的工程师,请仔细阅读,不要因为忽视 ...

  8. 搭建Mantis 缺陷管理系统(转)

    转自 什么是Mantis MantisBT is a free popular web-based bugtracking system (feature list). It is written i ...

  9. 虚拟机安卓APK

    输入命令,可以直接把桌面上的程序直接拖过来. 注意第二条命令,有"-r".

  10. Android 在地图上画矩形

    point1=map.toMapPoint(400,426); point2=map.toMapPoint(600,640); initextext = new Envelope(point1.get ...