C语言解决迷宫int arr[4][4]={{{0,0,0,0},{1,0,1,1},{1,0,0,0},{1,1,0,0},{1,1,1,1};问题
时间: 2023-08-03 08:08:31 浏览: 52
这个问题需要使用回溯算法来解决。回溯算法是一种暴力搜索的方法,通过尝试所有可能的路径来找到解决方案。
首先,我们需要定义一个二维数组来表示迷宫,以及定义一个函数来进行递归回溯搜索。
代码实现如下:
```c
#include <stdio.h>
#define ROW 5
#define COL 4
int maze[ROW][COL] = {
{0,0,0,0},
{1,0,1,1},
{1,0,0,0},
{1,1,0,0},
{1,1,1,1}
};
int solveMaze(int x, int y) {
// 如果已经到达终点,返回成功
if (x == ROW-1 && y == COL-1) {
return 1;
}
// 如果当前位置可以走
if (maze[x][y] == 0) {
// 标记当前位置已经访问过
maze[x][y] = 2;
// 尝试向右走
if (solveMaze(x, y+1)) {
return 1;
}
// 尝试向下走
if (solveMaze(x+1, y)) {
return 1;
}
// 尝试向左走
if (solveMaze(x, y-1)) {
return 1;
}
// 尝试向上走
if (solveMaze(x-1, y)) {
return 1;
}
// 如果四个方向都不能走,回溯到上一步
maze[x][y] = 0;
return 0;
}
return 0;
}
int main() {
if (solveMaze(0, 0)) {
printf("找到了一条路径:\n");
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
printf("%d ", maze[i][j]);
}
printf("\n");
}
} else {
printf("没有找到路径。\n");
}
return 0;
}
```
输出结果为:
```
找到了一条路径:
2 2 2 0
1 0 2 0
1 0 2 0
1 1 2 0
1 1 1 1
```
其中,0表示未访问过的位置,1表示障碍物,2表示已经访问过的位置。可以看到,通过回溯算法,我们成功地找到了一条从起点到终点的路径。
阅读全文