米诺陶迷宫问题c++代码
时间: 2024-10-13 08:01:21 浏览: 21
米诺陶迷宫问题是一个经典的计算机科学问题,通常用于演示搜索算法如深度优先搜索 (DFS) 或广度优先搜索 (BFS),以及图的遍历。这里我将给出一个简单的 C++ 代码示例,用深度优先搜索来解决迷宫问题:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 表示迷宫矩阵,0表示空地,1表示墙壁
const int MAZE_WIDTH = 8;
const int MAZE_HEIGHT = 8;
bool maze[MAZE_WIDTH][MAZE_HEIGHT];
// 二维数组作为邻接矩阵,用于存储可达位置
int adjMatrix[MAZE_WIDTH][MAZE_HEIGHT];
void dfs(int x, int y, bool visited[]) {
// 标记当前位置为已访问
visited[x][y] = true;
cout << "Visiting (" << x << ", " << y << ")" << endl;
// 检查周围是否有未访问的空地,并递归探索
if(x > 0 && !visited[x - 1][y]) dfs(x - 1, y, visited);
if(y > 0 && !visited[x][y - 1]) dfs(x, y - 1, visited);
if(x < MAZE_WIDTH - 1 && !visited[x + 1][y]) dfs(x + 1, y, visited);
if(y < MAZE_HEIGHT - 1 && !visited[x][y + 1]) dfs(x, y + 1, visited);
// 当前节点不是目标,回溯到上一层
}
int main() {
// 初始化迷宫矩阵和邻接矩阵,这里假设迷宫边界都是墙壁
for(int i = 0; i < MAZE_WIDTH; ++i) {
for(int j = 0; j < MAZE_HEIGHT; ++j) {
maze[i][j] = 1;
adjMatrix[i][j] = 0;
}
}
// 假设起点在左下角,终点在右上角
maze[0][0] = 0;
maze[MAZE_WIDTH - 1][MAZE_HEIGHT - 1] = 0;
// 初始化访问标记
vector<vector<bool>> visited(MAZE_WIDTH, vector<bool>(MAZE_HEIGHT, false));
// 调用深度优先搜索
dfs(0, 0, visited.data());
return 0;
}
```