迷宫求解c++
时间: 2023-07-01 12:17:32 浏览: 101
迷宫求解是一个经典的算法问题,可以使用深度优先搜索、广度优先搜索等多种算法实现。以下是使用深度优先搜索算法求解迷宫的C++代码示例:
```c++
#include<iostream>
#include<vector>
using namespace std;
const int MAXN = 10;
int n, m; // 迷宫的行数和列数
int sx, sy, ex, ey; // 起点和终点的坐标
char maze[MAXN][MAXN]; // 迷宫地图
bool vis[MAXN][MAXN]; // 标记某个位置是否被访问过
int dir[4][2] = {{0,1}, {0,-1}, {1,0}, {-1,0}}; // 四个方向的移动
bool dfs(int x, int y) {
vis[x][y] = true; // 标记当前位置已访问
if (x == ex && y == ey) return true; // 到达终点
for (int i = 0; i < 4; i++) {
int nx = x + dir[i][0], ny = y + dir[i][1]; // 计算下一个位置的坐标
if (nx >= 1 && nx <= n && ny >= 1 && ny <= m // 判断下一个位置是否合法
&& maze[nx][ny] != '#' && !vis[nx][ny]) {
if (dfs(nx, ny)) return true; // 递归搜索下一个位置
}
}
return false; // 搜索失败
}
int main() {
cin >> n >> m >> sx >> sy >> ex >> ey;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> maze[i][j];
}
}
if (dfs(sx, sy)) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
return 0;
}
```
以上代码中,`vis`数组用于标记某个位置是否被访问过,`dfs`函数用于递归地搜索下一个位置,若到达终点则返回`true`,否则返回`false`。最后判断起点和终点是否连通即可。
阅读全文