#include <deque>
#define inf 200000
#include<iostream>
#include<queue>
using namespace std;
// 迷宫坐标
int map[59][59][59] = { 0 };
// 可访问标记
int visit[51][51][51] = { 0 };
// 移动方式
int next1[7][4] = { {1,0,0},{-1,0,0}
, {0,1,0},{0,-1,0}
, {0,0,1},{0,0,-1} };
// 声明迷宫大小,及时间
int x = 0, y = 0, z = 0, T = 0;
// 判断能否逃出迷宫
int f = 0;
// bfs
void bfs();
struct node {
int x;
int y;
int z;
int val;
};
int main()
{
int k = 0; scanf("%d", &k);
while (k--)
{
// 输入 x高, y长 ,z长
scanf("%d %d %d %d", &x, &y, &z, &T);
// 输入立体迷宫
for (int x1 = 0; x1 < x; x1++)
{
for (int y1 = 0; y1 < y; y1++)
{
for (int z1 = 0; z1 < z; z1++)
{ visit[x1][y1][z1] = 0;
scanf("%d", &map[x1][y1][z1]);}
}
}
// 队列bfs
bfs();
}
return 0;
}
void bfs()
{
queue<node> arr;
node fir{ 0,0,0,0 };
arr.push(fir);
int ex = x - 1, ey = y - 1, ez = z - 1;
visit[0][0][0] = 1;
int node1 = 1, k = 0;
while (!arr.empty())
{
int num = 0;
if (arr.front().x == ex && arr.front().y == ey && arr.front().z == ez)
{
if (arr.front().val <= T)
cout << arr.front().val << endl;
else
cout << -1 << endl;
return;
}
for (int i = 0; i < 6; i++)
{
node temp{};
int tx = arr.front().x + next1[i][0],
ty = arr.front().y + next1[i][1],
tz = arr.front().z + next1[i][2];
// 下标在数组范围内
// 迷宫中为路
// 未标记过的有效点
if (visit[tx][ty][tz] == 0
&& tx < x && tx >= 0
&& ty < y && ty >= 0
&& tz < z && tz >= 0
&& map[tx][ty][tz] == 0)
{
temp.x = tx;
temp.y = ty;
temp.z = tz;
// 更新最短路(以上一级为参考)
temp.val = arr.front().val + 1;
// 不是目标,进行标记
visit[tx][ty][tz] = 1;
//加入有效点
arr.push(temp);
}
}
// 弹出队列首元素
arr.pop();
}
cout << -1 << endl;
return;
}
问题 R: 胜利大逃亡(HUST)
%d%d22023-11-21 22:42
相关推荐
tinker在coding4 分钟前
Coding Caprice - Linked-List 1唐诺4 小时前
几种广泛使用的 C++ 编译器XH华4 小时前
初识C语言之二维数组(下)南宫生5 小时前
力扣-图论-17【算法学习day.67】不想当程序猿_5 小时前
【蓝桥杯每日一题】求和——前缀和落魄君子5 小时前
GA-BP分类-遗传算法(Genetic Algorithm)和反向传播算法(Backpropagation)冷眼看人间恩怨5 小时前
【Qt笔记】QDockWidget控件详解菜鸡中的奋斗鸡→挣扎鸡5 小时前
滑动窗口 + 算法复习红龙创客5 小时前
某狐畅游24校招-C++开发岗笔试(单选题)Lenyiin5 小时前
第146场双周赛:统计符合条件长度为3的子数组数目、统计异或值为给定值的路径数目、判断网格图能否被切割成块、唯一中间众数子序列 Ⅰ