【HDOJ】1253 胜利大逃亡
2024-10-20 16:26:47
经典的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 ;
}
最新文章
- 如何快速找到排好序的数组中最先不连续的数字N
- LoadRunner函数示例:lr_paramarr_random()
- mysql 乱码问题(程序界面显示正常,mysql command line显示乱码)
- JS获取checkbox的个数
- 让最新官方编译的 ffmpeg 在 XP 上 跑起来
- ROS实际问题解决方法
- linux 下如何查看和踢除正在登陆的其它用户 ==>;Linux下用于查看系统当前登录用户信息的4种方法
- SQL关于apply的两种形式cross apply和outer apply(转载)
- C#生成软件注册码
- HttpWebRequest 上传图片
- Android系统下的动态Dex加载与app速度优化
- underscoreJS的Collections 的API
- 利用netstat和tasklist查看PC的端口占用情况
- ZooKeeper应用理论及其应用场景
- 清除input[type=number]的默认样式
- jumpservice使用465端口发送邮件
- IIS 之 通过 Web.config 修改文件上传大小限制设置方法
- Silverlight 预定义颜色速查表
- 【Go入门教程2】基本构成元素:标识符(identifier)、关键字(keyword 25个)、字面量(literal)、分隔符(delimiter)、和 操作符(operator)
- CentOS7统计某个进程当前的线程数
热门文章
- XML文件的解析方式
- FreeMarker语法2
- 快速开启Windows 的各种任务及 bat(ch)脚本
- Entity Framework 学习笔记(1)
- jQuery—一些常见方法(3)【width(),innerWidth(),outerWidth()】
- vertical-align:middle图片或者按钮垂直居中
- discuz 重新定义jquery的$
- Vijos P1062 迎春舞会之交谊舞
- 一步步学习ASP.NET MVC3 (3)——Razor(1)
- IDEA的使用