c语言迷宫问题输出所有路径
时间: 2023-09-08 19:07:34 浏览: 119
好的,我可以帮你解决迷宫问题并输出所有路径。假设你已经用二维数组表示了迷宫,其中1表示墙,0表示通路。我会使用递归的方式来解决这个问题。
首先,我们定义一个函数来判断当前位置是否可以到达:
```c
int can_go(int maze[][MAX], int x, int y, int n){
if(x >= 0 && x < n && y >= 0 && y < n && maze[x][y] == 0)
return 1;
return 0;
}
```
接下来,我们定义递归函数来寻找路径:
```c
void find_path(int maze[][MAX], int x, int y, int n, int path[][MAX], int* count){
if(x == n-1 && y == n-1){ // 到达终点
path[*count][x] = y;
(*count)++;
return;
}
if(can_go(maze, x, y, n)){
path[*count][x] = y;
maze[x][y] = 1; // 标记已访问过
find_path(maze, x+1, y, n, path, count); // 向下走
find_path(maze, x, y+1, n, path, count); // 向右走
find_path(maze, x-1, y, n, path, count); // 向上走
find_path(maze, x, y-1, n, path, count); // 向左走
maze[x][y] = 0; // 恢复标记
}
}
```
最后,我们在主函数中调用这个递归函数来输出所有路径:
```c
int main(){
int maze[MAX][MAX] = {...}; // 假设已经定义好了二维数组表示的迷宫
int path[MAX][MAX] = {0}; // 用于存放路径
int count = 0; // 记录路径数
find_path(maze, 0, 0, n, path, &count);
for(int i = 0; i < count; i++){
printf("Path %d: ", i+1);
for(int j = 0; j < n; j++){
printf("(%d,%d) ", j, path[i][j]);
}
printf("\n");
}
return 0;
}
```
希望这个代码能够帮到你!
阅读全文