#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
相关推荐
拼好饭和她皆失1 小时前
dfs 第一次加训 详解 下梁下轻语的秋缘3 小时前
每日c/c++题 备战蓝桥杯(P2241 统计方形(数据加强版))学习编程的gas5 小时前
C++面向对象编程入门:从类与对象说起(一)Bear on Toilet5 小时前
Bug日记——实现“日期类”apcipot_rain5 小时前
《面向对象程序设计-C++》实验五 虚函数的使用及抽象类zhczzm8 小时前
深入浅出之STL源码分析2_stl与标准库,编译器的关系朱剑君8 小时前
第四天——贪心算法——种花TextIn智能文档云平台8 小时前
PDF文档解析新突破:图表识别、公式还原、手写字体处理,让AI真正读懂复杂文档!Panesle9 小时前
HunyuanCustom:文生视频框架论文速读