C语言解决迷宫问题完整代码
时间: 2023-07-30 11:12:42 浏览: 116
以下是一个简单的 C 语言程序,用于解决迷宫问题。该程序使用了递归算法,可以在迷宫中寻找一条从起点到终点的路径。
```c
#include <stdio.h>
#define ROW 8
#define COL 8
int maze[ROW][COL] = {
{1, 1, 1, 1, 1, 1, 1, 1},
{1, 0, 0, 0, 1, 0, 0, 1},
{1, 0, 1, 0, 1, 0, 1, 1},
{1, 0, 1, 0, 0, 0, 0, 0},
{1, 0, 1, 1, 1, 1, 1, 1},
{1, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 1, 1, 1, 0, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1}
};
void print_maze() {
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
printf("%d ", maze[i][j]);
}
printf("\n");
}
}
int move(int x, int y) {
if (x == ROW - 1 && y == COL - 1) {
maze[x][y] = 2; // 标记为终点
return 1;
}
if (maze[x][y] == 0) {
maze[x][y] = 2; // 标记为走过
if (move(x + 1, y) || move(x, y + 1) || move(x - 1, y) || move(x, y - 1)) {
return 1;
} else {
maze[x][y] = 0; // 标记为未走过
return 0;
}
}
return 0;
}
int main() {
printf("迷宫地图:\n");
print_maze();
printf("\n");
if (move(1, 1)) {
printf("找到了一条从起点到终点的路径:\n");
print_maze();
} else {
printf("没有找到从起点到终点的路径!\n");
}
return 0;
}
```
在该程序中,我们首先定义了一个 `maze` 数组,表示迷宫地图。其中,0 表示可通过的位置,1 表示障碍物,2 表示已走过的位置。
接着,我们定义了 `print_maze` 函数,用于打印迷宫地图。
然后,我们定义了 `move` 函数,用于递归地寻找从 `(x,y)` 出发到达终点的路径。该函数的实现如下:
- 如果当前位置 `(x,y)` 是终点,则标记为终点并返回 1。
- 如果当前位置 `(x,y)` 可以通过,则标记为已走过,并递归调用 `move` 函数,分别尝试往下、右、上、左四个方向移动。如果有一条路径可以到达终点,则返回 1;否则,将 `(x,y)` 标记为未走过并返回 0。
- 如果当前位置 `(x,y)` 是障碍物或已走过,则返回 0。
最后,在 `main` 函数中,我们调用 `move` 函数从起点开始寻找路径。如果找到了一条路径,则打印迷宫地图并输出路径;否则,输出提示信息。
阅读全文