HDU 1253
2016-02-26 20:50
232 查看
这道题的题目很明确,没有坑,只需要搜索最短路径比对魔王回来的时间就可以了。只是跟平常的搜索有区别的是这道题的地图是三维的。
我们只需要将数据记录在三维数组中进行搜索就行了。
我们只需要将数据记录在三维数组中进行搜索就行了。
#include<iostream> #include <stdio.h> #include <cstring> #include <algorithm> #include <queue> #include <stdlib.h> using namespace std; #define N 51 char map[N][N][N] = {0}; //三维地图 int A, B, C, T; char vis[N][N][N] = {0}; //是否搜索过的标记 struct node { int x, y, z; int time; }; int dir[6][3] = { { 1, 0, 0 }, { -1, 0, 0 }, { 0, 1, 0 }, { 0, -1, 0 }, { 0, 0, 1 }, { 0, 0, -1 } }; //方向 int Judge(int x, int y, int z) //判断边界 { if (x >= 0 && x < A&& y >= 0 && y < B && z >= 0 && z < C && map[x][y][z] == 0) { return 1; } else { return 0; } } int bfs(int n) //搜索开始 { node start, end; int i; queue<node>q; start.x = 0; start.y = 0; start.z = 0; start.time = 0; q.push(start); memset(vis, 0, sizeof(vis)); vis[0][0][0] = 1; while (!q.empty()) { start = q.front(); q.pop(); if (start.time > n) //如果已经超过了最短时间返回-1 { return -1; } if (start.x == A - 1 && start.y == B - 1 && start.z == C - 1 && start.time <= n) //如果到达终点位置返回需要的时间 { return start.time; } int i; for (i = 0; i < 6; i++) { end.x = start.x + dir[i][0]; end.y = start.y + dir[i][1]; end.z = start.z + dir[i][2]; if (Judge(end.x, end.y, end.z) == 1 && vis[end.x][end.y][end.z] == 0) { vis[end.x][end.y][end.z] = 1; end.time = start.time + 1; if (abs(end.x - A + 1) + abs(end.y - B + 1) + abs(end.z - C + 1) + end.time >n)//此步用来简化搜索 continue; q.push(end); } } } return -1; } int main() { int i, j, k, t; scanf("%d", &t); while (t--) { 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]); } } } int ans = 0; ans = bfs(T); printf("%d\n", ans); } return 0; }
相关文章推荐
- 安装scrapy
- Java游戏服务端编程心得
- 计算机专业英语 学习笔记 4
- xUtils3简介
- Web前端环境搭建篇之--Ant的安装
- MySql经典语句
- 研究一下,手机边充电边用究竟好不好
- Ambari 1.7 源码编译笔记
- 引用的初步认识
- 如何打开res/raw目录中的数据库文件?
- 开发证书失效
- BroadcastReceiver静态注册广播与动态注册广播接收器
- EF Core 1.0中使用Include的小技巧
- JAVA获取项目类路径的一个坑
- 黑马程序员-OC加强-内存管理
- ios 相册获取图片模糊解决办法
- 依赖库问题记录(一)
- MySQL日期和时间类型
- 识别字符串中的整数并转换为数字形式
- SDWebImage缓存图片的机制