用c++写一个回溯法迷宫问题
时间: 2023-06-09 09:07:46 浏览: 84
好的,下面是回溯法解决迷宫问题的C语言实现:
```
#include <stdio.h>
#define N 5 // 迷宫的行数
#define M 5 // 迷宫的列数
// 迷宫地图
int map[N][M] = {
{0, 0, 0, 0, 0},
{0, 1, 1, 0, 0},
{0, 0, 1, 1, 0},
{0, 0, 0, 0, 0},
{0, 0, 1, 0, 0},
};
// 用来标记迷宫中的格子是否走过
int visited[N][M] = {0};
// 定义方向数组,上右下左
int fx[4] = {-1, 0, 1, 0};
int fy[4] = {0, 1, 0, -1};
// start: 起点坐标
// end: 终点坐标
int DFS(int x, int y, int endX, int endY)
{
// 判断是否到达终点
if (x == endX && y == endY) {
return 1; // 到达终点,返回1
}
// 标记当前坐标已经走过
visited[x][y] = 1;
// 尝试往四个方向走
for (int i = 0; i < 4; i++) {
int nx = x + fx[i];
int ny = y + fy[i];
// 判断是否越界
if (nx >= 0 && nx < N && ny >= 0 && ny < M) {
// 判断当前格子是否可以走,并且没有访问过
if (map[nx][ny] == 0 && visited[nx][ny] == 0) {
// 继续往下走
if (DFS(nx, ny, endX, endY) == 1) {
return 1; // 已经找到通路,返回1
}
}
}
}
// 无路可走,返回0
return 0;
}
int main()
{
int startX = 1, startY = 1;
int endX = 4, endY = 3;
if (DFS(startX, startY, endX, endY) == 1) {
printf("迷宫有通路!\n");
} else {
printf("迷宫无通路!\n");
}
return 0;
}
```
这个程序实现了从起点到终点的路径查找。其中,`map`数组表示迷宫地图,1表示障碍物,0表示可通过;`visited`数组表示每个格子是否已经访问过;`fx`和`fy`数组表示四个方向的移动距离。最后通过DFS遍历来查找路径,如果找到终点则返回1,否则返回0。