使用c语言或c++编写代码随机生成一个迷宫,用栈(Stack)和队列(Queue)求解迷宫问题,打印出迷宫的路径和路径的长度,进行对比
时间: 2024-10-19 22:08:57 浏览: 23
在C/C++中,生成随机迷宫一般可以利用深度优先搜索(DFS)结合随机选择来构造。这里我将给出一个简单的迷宫生成和路径寻找示例,分别用栈(DFS)和队列(BFS)来解决问题,并打印结果。请注意,这只是一个基础的演示,实际的代码会更复杂,涉及更多的数据结构和控制逻辑。
### 随机迷宫生成 (C/C++) 示例:
```cpp
#include <iostream>
#include <vector>
#include <ctime>
// 生成随机迷宫函数 (使用DFS)
std::vector<std::vector<int>> generateMaze(int n, int m) {
std::vector<std::vector<int>> maze(n, std::vector<int>(m, 0));
bool visited[n][m];
std::srand(std::time(0)); // 设置随机种子
// DFS 初始化
dfs(maze, visited, 0, 0);
return maze;
}
void dfs(std::vector<std::vector<int>>& maze, bool visited[], int i, int j) {
visited[i][j] = true;
if (i > 0 && !visited[i - 1][j]) maze[i - 1][j] = 1; // 上方墙
if (j > 0 && !visited[i][j - 1]) maze[i][j - 1] = 1; // 左方墙
if (i < maze.size() - 1 && !visited[i + 1][j]) maze[i + 1][j] = 1; // 下方墙
if (j < maze[0].size() - 1 && !visited[i][j + 1]) maze[i][j + 1] = 1; // 右方墙
// 如果四面都被墙包围,随机改变一边
int random_dir = rand() % 4;
switch (random_dir) {
case 0:
if (j > 0) maze[i][j - 1] = 0; break;
case 1:
if (i > 0) maze[i - 1][j] = 0; break;
case 2:
if (j < maze[0].size() - 1) maze[i][j + 1] = 0; break;
case 3:
if (i < maze.size() - 1) maze[i + 1][j] = 0; break;
}
// 继续向四周探索
for (int x = -1; x <= 1; ++x)
for (int y = -1; y <= 1; ++y)
if (!visited[i + x][j + y]) dfs(maze, visited, i + x, j + y);
}
```
### 解决迷宫 (使用栈/队列)
接下来,我们可以分别使用栈和队列找出从起点到终点的路径并计算其长度。
```cpp
// 使用栈的DFS求解
std::vector<int> dfsStack(std::vector<std::vector<int>>& maze, int start_x, int start_y) {
// ... 实现栈的路径跟踪逻辑 ...
// 返回路径和长度
int path_length = ...;
return path;
}
// 使用队列的BFS求解
std::vector<int> bfsQueue(std::vector<std::vector<int>>& maze, int start_x, int start_y) {
// ... 实现队列的路径追踪逻辑 ...
// 返回路径和长度
int path_length = ...;
return path;
}
```
最后,你可以通过调用这两个函数,并比较它们返回的结果:
```cpp
int main() {
int maze_size = 10; // 迷宫大小
auto maze = generateMaze(maze_size, maze_size);
int start_x = 0, start_y = 0; // 起点坐标
int end_x = 9, end_y = 9; // 终点坐标
// 获取并打印路径和长度
std::vector<int> stack_path = dfsStack(maze, start_x, start_y);
int stack_length = ...;
std::vector<int> queue_path = bfsQueue(maze, start_x, start_y);
int queue_length = ...;
std::cout << "Stack path: ";
printPath(stack_path); // 打印路径
std::cout << "Length: " << stack_length << "\n";
std::cout << "Queue path: ";
printPath(queue_path); // 打印路径
std::cout << "Length: " << queue_length << "\n";
return 0;
}
```
这里的`printPath`函数是一个辅助函数,用于打印迷宫路径。实际代码中你需要实现这部分功能。
阅读全文