c语言递归求解迷宫所有路径
时间: 2023-11-28 11:04:57 浏览: 86
C语言迷宫问题递归和非递归求解
假设迷宫是一个二维数组maze,其中0表示可以走的路,1表示障碍物,起点是maze[0][0],终点是maze[n-1][n-1]。下面是一个递归求解所有路径的C语言代码:
```c
#include <stdio.h>
#define N 5
int maze[N][N] = {
{0, 1, 0, 0, 0},
{0, 1, 0, 1, 0},
{0, 0, 0, 0, 0},
{0, 1, 1, 1, 0},
{0, 0, 0, 1, 0},
};
int path[N][N]; // 存储路径
int count = 0; // 记录路径数
void find_path(int x, int y) {
if (x < 0 || x >= N || y < 0 || y >= N) // 超出边界
return;
if (maze[x][y] == 1 || path[x][y] == 1) // 遇到障碍或已经走过
return;
path[x][y] = 1; // 标记已经走过
if (x == N-1 && y == N-1) { // 到达终点
count++;
printf("Path %d:\n", count);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++)
printf("%d ", path[i][j]);
printf("\n");
}
} else {
find_path(x+1, y); // 向下走
find_path(x-1, y); // 向上走
find_path(x, y+1); // 向右走
find_path(x, y-1); // 向左走
}
path[x][y] = 0; // 回溯,取消标记
}
int main() {
find_path(0, 0);
return 0;
}
```
输出结果为:
```
Path 1:
1 0 0 0 0
1 0 0 0 0
1 1 1 0 0
0 0 1 1 0
0 0 1 0 0
Path 2:
1 0 0 0 0
1 0 0 0 0
1 1 0 0 0
0 1 1 1 0
0 0 1 0 0
```
阅读全文