问题 R: 胜利大逃亡(HUST)

复制代码
#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;
}
相关推荐
咔咔咔的1 小时前
1930. 长度为 3 的不同回文子序列
c++
春日见3 小时前
丝滑快速拓展随机树 S-RRT(Smoothly RRT)算法核心原理与完整流程
人工智能·算法·机器学习·路径规划算法·s-rrt
Code小翊3 小时前
”回调“高级
算法·青少年编程
云里雾里!3 小时前
力扣 977. 有序数组的平方:双指针法的优雅解法
算法·leetcode·职场和发展
一只侯子6 小时前
Face AE Tuning
图像处理·笔记·学习·算法·计算机视觉
Cinema KI6 小时前
吃透C++继承:不止是代码复用,更是面向对象设计的底层思维
c++
jianqiang.xue6 小时前
别把 Scratch 当 “动画玩具”!图形化编程是算法思维的最佳启蒙
人工智能·算法·青少年编程·机器人·少儿编程
不许哈哈哈6 小时前
Python数据结构
数据结构·算法·排序算法
J***79397 小时前
后端在分布式系统中的数据分片
算法·哈希算法
Dream it possible!8 小时前
LeetCode 面试经典 150_二叉搜索树_二叉搜索树中第 K 小的元素(86_230_C++_中等)
c++·leetcode·面试