迷宫问题c++回溯递归
时间: 2023-09-26 22:07:53 浏览: 110
使用 ncurses 的C ++ 递归回溯迷宫生成算法_C++_代码_下载
好的,下面是一个简单的迷宫问题的 C++ 回溯递归实现:
```c++
#include<iostream>
using namespace std;
// 定义迷宫的行列数
const int N = 5;
// 定义迷宫地图
int maze[N][N] = {
{0, 0, 0, 0, 0},
{0, 1, 1, 0, 0},
{0, 0, 1, 1, 0},
{0, 0, 0, 1, 0},
{1, 1, 0, 0, 0}
};
// 定义标记数组
int mark[N][N];
// 定义方向数组
int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
// 递归函数,判断是否能够到达终点
bool dfs(int x, int y)
{
// 判断当前位置是否为终点
if (x == N-1 && y == N-1) {
return true;
}
// 标记当前位置已经走过
mark[x][y] = 1;
// 枚举四个方向
for (int i = 0; i < 4; i++) {
int nx = x + dir[i][0];
int ny = y + dir[i][1];
// 判断是否越界,是否能够走,以及该位置是否已经走过
if (nx >= 0 && nx < N && ny >= 0 && ny < N && !maze[nx][ny] && !mark[nx][ny]) {
// 递归搜索下一步是否能够到达终点
if (dfs(nx, ny)) {
return true;
}
}
}
// 如果四个方向都无法到达终点,则返回 false
return false;
}
int main()
{
// 如果起点和终点都是 0,那么就可以通过 DFS 判断是否能够到达终点
if (maze[0][0] == 0 && maze[N-1][N-1] == 0 && dfs(0, 0)) {
cout << "可以到达
阅读全文