递归求解走迷宫问题算法代码详情
时间: 2023-10-03 11:04:48 浏览: 108
函数递归走迷宫详解及代码
4星 · 用户满意度95%
好的,下面是一个递归求解走迷宫问题的算法代码示例:
```
#include <iostream>
using namespace std;
const int N = 5; //迷宫的大小
int maze[N][N] = { //迷宫的地图,0代表可行,1代表障碍
{0, 0, 0, 1, 0},
{1, 1, 0, 0, 0},
{0, 0, 0, 1, 0},
{0, 1, 1, 1, 0},
{0, 0, 0, 0, 0}
};
bool solveMaze(int x, int y)
{
if(x == N-1 && y == N-1) //找到了终点
{
return true;
}
if(x >= 0 && x < N && y >= 0 && y < N && maze[x][y] == 0) //当前位置可行
{
maze[x][y] = 2; //标记为已经走过
if(solveMaze(x+1, y) || solveMaze(x-1, y) || solveMaze(x, y+1) || solveMaze(x, y-1)) //向四个方向递归搜索
{
return true;
}
maze[x][y] = 0; //回溯,标记为未走过
return false;
}
return false;
}
int main()
{
if(solveMaze(0, 0))
{
cout << "存在一条路径可以走出迷宫" << endl;
}
else
{
cout << "不存在任何一条路径可以走出迷宫" << endl;
}
return 0;
}
```
这个算法使用递归的方式进行深度搜索,对于每个可行的位置,尝试向四个方向走一步,并递归搜索下去,只要找到一条到达终点的路径即可结束递归。在搜索过程中,使用一个二维数组`maze`表示迷宫的地图,用0表示可行,1表示障碍,2表示走过的路线。搜索完成后,若存在到达终点的路径则返回true,否则返回false。
阅读全文