用栈实现迷宫,要求迷宫大小为m行n列,每个位置可走的方向是上、下、左、右4个方向,迷宫的入口是1,n出口是 m、1。找到路径后在迷宫中用特殊字符表示该路径。
时间: 2024-10-18 22:10:31 浏览: 29
要使用栈(Stack)数据结构来模拟从迷宫入口到出口的路径搜索,我们可以采用深度优先搜索(DFS)算法。以下是一个简化的C++实现:
```cpp
#include <iostream>
#include <stack>
using namespace std;
// 定义迷宫的结构体或矩阵,这里简化为二维数组
int maze[100][100] = {0}; // 初始化为0表示未访问
// 动态定义当前位置和方向
struct Position {
int row, col;
char direction; // 上('U')、下('D')、左('L')、右('R')
};
// 遍历相邻位置的辅助函数
void explore(int row, int col, Position& current) {
if (row >= 0 && row < m && col >= 0 && col < n && maze[row][col] == 1) {
maze[row][col] = special_char; // 标记为已访问
stack<Position> path; // 创建栈保存路径信息
path.push({row, col, current.direction});
while (!path.empty()) {
Position next_pos = path.top();
path.pop();
if (next_pos.row == m - 1 && next_pos.col == 0) return; // 找到出口
if (next_pos.direction == 'U') --next_pos.col;
else if (next_pos.direction == 'D') ++next_pos.col;
else if (next_pos.direction == 'L') --next_pos.row;
else if (next_pos.direction == 'R') ++next_pos.row;
if (maze[next_pos.row][next_pos.col] == 1) {
maze[next_pos.row][next_pos.col] = special_char;
path.push(next_pos);
next_pos.direction = 'N'; // 假设下一个方向是北('N'),避免重复
}
}
}
}
int main() {
int m, n;
cout << "Enter the dimensions of the maze (rows and columns): ";
cin >> m >> n;
// 初始化迷宫边界为墙(0)
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (i == 0 || i == m - 1 || j == 0 || j == n - 1) {
maze[i][j] = 0;
} else {
maze[i][j] = 1;
}
}
}
maze[0][n - 1] = 1; // 设置入口
maze[m - 1][0] = 1; // 设置出口
maze[0][0] = maze[m - 1][n - 1] = special_char; // 初始化入口和出口为特殊字符
Position start = {0, n - 1, 'R'}; // 从右下角开始
explore(start.row, start.col, start);
// 打印迷宫,显示路径
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cout << maze[i][j];
}
cout << endl;
}
return 0;
}
```
在这个代码里,我们首先创建了一个二维数组表示迷宫,然后定义了`explore`函数来进行深度优先搜索。当找到出口时,我们就回溯并标记路径上的每一个位置。`main`函数中处理了用户的输入,设置了初始状态,并打印出最终的迷宫。
阅读全文