这道题使用BFS做的,刚开始有点不太理解为什么使用队列,一旦遇到可以到达终点的节点就立即返回,找到最短时间,最后明白了,因为在队列里的所有节点一定比队头节点

的时间长。下面是具体代码:

#include<stdio.h>
#include<queue>
using namespace std;
typedef struct{   int x,y,z,steps;
}point;
point start,end;
int a,b,c,t,n;
int map[51][51][51];
int dir[6][3]={{1,0,0}, {-1,0,0}, {0,1,0}, {0,-1,0}, {0,0,1}, {0,0,-1}};
int bfs(point start){   queue<point>q;   int i;   point cur,next; if(start.x==a-1&&start.y==b-1&&start.z==c-1)//考虑起点和终点相同的情况  {      return 0; }  start.steps=0; map[start.x][start.y][start.z]=1; q.push(start);  while(!q.empty()) {     cur=q.front();//取队首元素  q.pop();      for(i=0;i<6;i++) //广度优先搜索   {        next.x=cur.x+dir[i][0];    next.y=cur.y+dir[i][1];    next.z=cur.z+dir[i][2];      if(next.x==a-1 && next.y==b-1 && next.z==c-1) //下一步就是目的地    {             return cur.steps+1; }if(next.x>=0&&next.x<a&&next.y>=0&&next.y<b&&next.z>=0&&next.z<c)    if(map[next.x][next.y][next.z]!=1) {               map[next.x][next.y][next.z]=1;     next.steps=cur.steps+1;           q.push(next);          }     }    }   return -1;
}
int main()
{    int i,j,k,step;  scanf("%d\n",&n); while(n--)   {       scanf("%d %d %d %d",&a,&b,&c,&t);       for(i=0;i<a;i++)          for(j=0;j<b;j++)             for(k=0;k<c;k++)              scanf("%d",&map[i][j][k]);      if(a+b+c-3>t) {printf("-1\n");continue; }       if(map[a-1][b-1][c-1]==1){printf("-1\n");continue;}start.x=0;   start.y=0;    start.z=0;step=bfs(start);     if(step>=0&&step<=t)       printf("%d\n",step);   else         printf("-1\n");   }   return 0;
}

转载于:https://www.cnblogs.com/tianfeng/archive/2013/05/31/bfs.html

POJ_1253胜利的大逃亡相关推荐

  1. HDU 1429 胜利大逃亡(续) (BFS+位压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)  ...

  2. [ACM] hdu 1253 胜利大逃亡 (三维BFS)

    胜利大逃亡 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这但是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,能够被表示 ...

  3. HDU 1253 胜利大逃亡

    胜利大逃亡 Time Limit: 2000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 1253 ...

  4. HDU 1429 胜利大逃亡(续)

    胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  5. HDOJ 1253 HDU 1253 胜利大逃亡 ACM 1253 IN HDU

    MiYu原创, 转帖请注明 : 转载自 ______________白白の屋   题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1253 题目描述: ...

  6. hdu 1429 胜利大逃亡(续) bfs+状态压缩

    胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  7. HDU 1253 胜利大逃亡 题解

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  8. HDU1253 胜利大逃亡

    这个问题一看,可以说和UVA532 Dungeon Master完全相同,豪情万丈地做了拷贝来程序修改,一提交结果是"Time Limit Exceeded",满脸困惑.多方调查研 ...

  9. HDU 1253.胜利大逃亡

    胜利大逃亡 Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u SubmitStatusP ...

最新文章

  1. 初学 ASP.NET AJAX (一):构建 ASP.NET AJAX 开发环境
  2. 最详细的vue-cli工具构建vue项目教程
  3. Ring3下Inline Hook API
  4. Leetcode--151. 翻转字符串里的单词
  5. html td中加label,html – td对齐内的2个标签
  6. 远程连接linux服务器文件共享,linux mount 远程服务器共享目录
  7. iOS常用手势识别器
  8. Docker Weave 介绍 or 工作原理
  9. 什么都懂, 为什么没有业绩?
  10. Java GC种类以及触发时机
  11. julia 使用修改后的pkg
  12. java中比例尺,地图比例尺换算原理
  13. 日语五段动词变形规则
  14. MJPEG和MP4——视频转换随想
  15. html写出日出,有关描写日出的优美段落
  16. 八大算法实现(Java)
  17. 什么是商业智能 (BI) 仪表板?
  18. python获取鼠标的当前坐标
  19. h0154.加勒比海盗船——最优装载问题 (20 分)
  20. all CUDA-capable devices are busy or unavailable in function ‘setDevice‘

热门文章

  1. 软件工程--第五章-- 总体设计
  2. 以太坊代码标准是什么_以太坊的包容性开发语言里到底藏着什么秘密?
  3. 微信抢红包的方案_免费公开实收20000的烤鸭店营销方案,餐饮行业可复用
  4. 数学--数论-- HDU6298 Maximum Multiple 打表找规律
  5. 我也不知道该咋分类--莫队算法
  6. B 树、B+ 树、B* 树
  7. 特征提取——HOG方向梯直方图
  8. 检测和语义分割_分割和对象检测-第5部分
  9. R统计工具:正态性检验
  10. 女孩子应该养成的好习惯