c++以一个mXn的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。
时间: 2024-10-06 13:05:38 浏览: 45
在C++中,我们可以使用深度优先搜索(Depth-First Search, DFS)或广度优先搜索(Breadth-First Search, BFS)算法来解决这个问题。这里我将以DFS为例,因为其更适合寻找路径直到找到出口,如果找不到就返回无解。
首先,我们需要创建一个迷宫矩阵结构体或类,并包含两个成员变量:一个用于存储当前节点,另一个用于存储到达的最近节点。然后定义一个函数`dfs`来进行深度优先遍历:
```cpp
#include <vector>
using namespace std;
// 假设迷宫大小为m*n,0代表通路,1代表障碍
struct Maze {
int maze[m][n];
int x, y; // 当前节点坐标
int parent[2]; // 迷宫中的上、下、左、右四个方向的邻居坐标
};
bool findPath(int m, int n, vector<vector<int>>& maze, int startRow, int startCol, int endRow, int endCol) {
Maze current = {maze, startRow, startCol};
bool visited[m][n] = {false}; // 记录已访问的位置
if (current.x == endRow && current.y == endCol) {
return true;
}
visited[current.x][current.y] = true;
for (int i = 0; i < 4; ++i) {
int nextRow = current.x + current.parent[i][0];
int nextCol = current.y + current.parent[i][1];
// 检查是否越界或遇到障碍
if (nextRow >= 0 && nextRow < m && nextCol >= 0 && nextCol < n && !maze[nextRow][nextCol]) {
current.x = nextRow;
current.y = nextCol;
if (findPath(m, n, maze, current.x, current.y, endRow, endCol)) {
return true;
}
}
}
return false; // 如果没有找到路径,回溯并标记当前位置为未访问
}
int main() {
// 初始化迷宫矩阵,start和end分别为起点和终点
// ...
int startRow, startCol, endRow, endCol; // 设置起点和终点
if (findPath(m, n, maze, startRow, startCol, endRow, endCol)) {
cout << "找到了从入口到出口的通路!" << endl;
} else {
cout << "没有从入口到出口的通路." << endl;
}
return 0;
}
```
阅读全文