迷宫问题回溯法c语言
时间: 2023-11-20 10:59:09 浏览: 134
c语言实现迷宫回溯问题
以下是一个基于回溯算法的迷宫问题求解程序的C语言实现,程序可以找到从起点到终点的一条路径。假设迷宫是一个二维数组maze,其中0表示可以通过的路,1表示障碍物,起点为maze[0],终点为maze[n-1][n-1],n为迷宫的大小。
```c
#include <stdio.h>
#define N 10
int maze[N][N] = { // 迷宫地图
{0, 1, 0, 0, 0, 0, 0, 1, 0, 0},
{0, 1, 0, 1, 1, 1, 0, 1, 0, 1},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{1, 0, 1, 0, 1, 1, 1, 0, 1, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{0, 1, 0, 1, 1, 1, 0, 1, 0, 0},
{0, 1, 0, 0, 0, 0, 0, 1, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 0}
};
int path[N][N] = {0}; // 记录路径
int find_path(int x, int y) {
if (x < 0 || x >= N || y < 0 || y >= N) { // 越界
return 0;
}
if (maze[x][y] == 1 || path[x][y] == 1) { // 障碍物或已经走过
return 0;
}
if (x == N - 1 && y == N - 1) { // 到达终点
path[x][y] = 1;
return 1;
}
path[x][y] = 1; // 标记为已经走过
if (find_path(x + 1, y) || find_path(x, y + 1) || find_path(x - 1, y) || find_path(x, y - 1)) { // 向四个方向探索
return 1;
}
path[x][y] = 0; // 回溯
return 0;
}
int main() {
if (find_path(0, 0)) {
printf("找到一条路径:\n");
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%d ", path[i][j]);
}
printf("\n");
}
} else {
printf("没有找到路径!\n");
}
return 0;
}
```
阅读全文