走迷宫问题c++
时间: 2023-08-03 15:16:01 浏览: 131
好的,走迷宫问题可以用深度优先搜索(DFS)或广度优先搜索(BFS)来解决。下面是一个用DFS解决走迷宫问题的C++代码示例:
```c++
#include <bits/stdc++.h>
using namespace std;
const int maxn = 100;
int n, m;
int maze[maxn][maxn]; // 迷宫
bool vis[maxn][maxn]; // 标记是否走过
int dir[4][2] = {{1,0}, {-1,0}, {0,1}, {0,-1}}; // 上下左右四个方向
void dfs(int x, int y) {
vis[x][y] = true; // 标记为已经走过
if (x == n && y == m) { // 到达终点
return;
}
for (int i = 0; i < 4; i++) { // 依次尝试上下左右四个方向
int nx = x + dir[i][0];
int ny = y + dir[i][1];
if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && maze[nx][ny] == 0 && !vis[nx][ny]) {
dfs(nx, ny); // 可以走则继续往下走
}
}
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> maze[i][j];
}
}
dfs(1, 1); // 从起点开始搜索
if (vis[n][m]) { // 判断是否到达终点
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
return 0;
}
```
其中 `maze` 数组表示迷宫,0表示可以通过的空地,1表示障碍物。`vis` 数组表示该点是否已经走过。`dir` 数组表示上下左右四个方向。从起点(1, 1)开始深度优先搜索,如果搜索到终点(n, m),则输出YES,否则输出NO。
阅读全文