经典的BFS,需要注意的是当前时间超过最小时间,输出-1。同时,队列为空时还未返回,证明并未找到终点(可能终点为墙)。此时也应该输出-1,这个部分容易wa。

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
using namespace std; #define MAXNUM 50
#define SETPOS(pos,xx,yy,zz,tt) pos.x=xx;pos.y=yy;pos.z=zz;pos.t=tt; typedef struct {
int x, y, z;
int t;
} pos_st; int map[MAXNUM][MAXNUM][MAXNUM];
int visit[MAXNUM][MAXNUM][MAXNUM];
int direct[][] = {{,,},{-,,},{,,},{,-,},{,,},{,,-}};
int a, b, c, mintime;
queue<pos_st> poss; void bfs(int x, int y, int z, int t) {
pos_st pos, tmp; SETPOS(pos,x,y,z,t);
poss.push(pos);
visit[x][y][z] = ; while (!poss.empty()) {
pos = poss.front();
poss.pop(); if (pos.t > mintime) {
printf("-1\n");
return;
}
if (pos.x==a- && pos.y==b- && pos.z==c-) {
printf("%d\n", pos.t);
return;
}
for (int i=; i<; ++i) {
SETPOS(tmp, pos.x+direct[i][], pos.y+direct[i][], pos.z+direct[i][], pos.t+);
if (tmp.x< || tmp.x>=a || tmp.y< || tmp.y>=b || tmp.z< || tmp.z>=c)
continue;
if (visit[tmp.x][tmp.y][tmp.z] || map[tmp.x][tmp.y][tmp.z]==)
continue;
visit[tmp.x][tmp.y][tmp.z] = ;
poss.push(tmp);
}
} printf("-1\n");
} int main() {
int case_n;
int i, j, k; scanf("%d", &case_n); while (case_n--) {
scanf("%d%d%d%d", &a,&b,&c,&mintime);
for (i=; i<a; ++i)
for (j=; j<b; ++j)
for (k=; k<c; ++k)
scanf("%d", &map[i][j][k]);
memset(visit, , sizeof(visit));
while (!poss.empty())
poss.pop();
bfs(,,,);
} return ;
}

最新文章

  1. 如何快速找到排好序的数组中最先不连续的数字N
  2. LoadRunner函数示例:lr_paramarr_random()
  3. mysql 乱码问题(程序界面显示正常,mysql command line显示乱码)
  4. JS获取checkbox的个数
  5. 让最新官方编译的 ffmpeg 在 XP 上 跑起来
  6. ROS实际问题解决方法
  7. linux 下如何查看和踢除正在登陆的其它用户 ==&gt;Linux下用于查看系统当前登录用户信息的4种方法
  8. SQL关于apply的两种形式cross apply和outer apply(转载)
  9. C#生成软件注册码
  10. HttpWebRequest 上传图片
  11. Android系统下的动态Dex加载与app速度优化
  12. underscoreJS的Collections 的API
  13. 利用netstat和tasklist查看PC的端口占用情况
  14. ZooKeeper应用理论及其应用场景
  15. 清除input[type=number]的默认样式
  16. jumpservice使用465端口发送邮件
  17. IIS 之 通过 Web.config 修改文件上传大小限制设置方法
  18. Silverlight 预定义颜色速查表
  19. 【Go入门教程2】基本构成元素:标识符(identifier)、关键字(keyword 25个)、字面量(literal)、分隔符(delimiter)、和 操作符(operator)
  20. CentOS7统计某个进程当前的线程数

热门文章

  1. XML文件的解析方式
  2. FreeMarker语法2
  3. 快速开启Windows 的各种任务及 bat(ch)脚本
  4. Entity Framework 学习笔记(1)
  5. jQuery—一些常见方法(3)【width(),innerWidth(),outerWidth()】
  6. vertical-align:middle图片或者按钮垂直居中
  7. discuz 重新定义jquery的$
  8. Vijos P1062 迎春舞会之交谊舞
  9. 一步步学习ASP.NET MVC3 (3)——Razor(1)
  10. IDEA的使用