深度优先搜索迷宫问题c语言
时间: 2023-08-24 15:37:19 浏览: 86
好的,下面是一个简单的深度优先搜索迷宫问题的 C 语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define ROW 6
#define COL 6
int maze[ROW][COL] = {
{0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 1, 0},
{0, 0, 0, 0, 1, 0},
{1, 1, 1, 0, 1, 0},
{0, 0, 0, 0, 1, 0},
{0, 0, 0, 0, 0, 0},
};
int visited[ROW][COL] = {0};
int dfs(int row, int col) {
// 如果到达终点,返回成功
if (row == ROW - 1 && col == COL - 1) {
return 1;
}
// 如果当前位置已经访问过或者是障碍物,返回失败
if (visited[row][col] || maze[row][col] == 1) {
return 0;
}
// 标记当前位置已经访问
visited[row][col] = 1;
// 尝试向上走
if (row > 0 && dfs(row - 1, col)) {
return 1;
}
// 尝试向下走
if (row < ROW - 1 && dfs(row + 1, col)) {
return 1;
}
// 尝试向左走
if (col > 0 && dfs(row, col - 1)) {
return 1;
}
// 尝试向右走
if (col < COL - 1 && dfs(row, col + 1)) {
return 1;
}
// 如果四个方向都无法到达终点,返回失败
return 0;
}
int main() {
if (dfs(0, 0)) {
printf("Can escape from the maze.\n");
} else {
printf("Cannot escape from the maze.\n");
}
return 0;
}
```
代码中定义了一个 6x6 的迷宫,并使用深度优先搜索算法来寻找从起点 (0, 0) 到终点 (5, 5) 的路径。在搜索过程中,使用 visited 数组来记录每个位置是否已经访问过,以避免重复访问。如果搜索到达了终点,就返回成功;如果搜索无法继续向前走或者已经访问过该位置,就返回失败。最后在主函数中判断是否找到了从起点到终点的路径。
阅读全文