迷宫深度优先遍历C语言代码
时间: 2023-11-12 17:10:16 浏览: 78
迷宫问题c语言 深度优先搜索
5星 · 资源好评率100%
以下是一个使用深度优先搜索算法遍历迷宫的简单C语言代码示例:
```
#include <stdio.h>
#define ROW 6
#define COL 6
int maze[ROW][COL] = {
{0, 1, 0, 0, 0, 0},
{0, 1, 0, 1, 1, 0},
{0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 0, 1},
{0, 0, 0, 1, 0, 0},
{0, 1, 0, 0, 0, 1}
};
int visited[ROW][COL];
void print_path(int r, int c) {
printf("(%d,%d) -> ", r, c);
}
int dfs(int r, int c) {
if (r < 0 || r >= ROW || c < 0 || c >= COL || visited[r][c] == 1 || maze[r][c] == 1) {
return 0;
}
visited[r][c] = 1;
if (r == ROW - 1 && c == COL - 1) {
print_path(r, c);
return 1;
}
if (dfs(r-1, c) == 1 || dfs(r, c+1) == 1 || dfs(r+1, c) == 1 || dfs(r, c-1) == 1) {
print_path(r, c);
return 1;
}
return 0;
}
int main() {
if (dfs(0, 0) == 0) {
printf("No path found.\n");
}
return 0;
}
```
在这个代码示例中,我们使用一个二维数组来表示迷宫。其中0表示可通过的路径,1表示障碍物。我们使用另一个二维数组visited来标记已经访问过的位置,确保不会重复访问同一个位置。在dfs函数中,我们首先判断当前位置是否越界、是否已经访问过、是否是障碍物,如果是则返回0。接着标记当前位置为已访问,并判断当前位置是否是终点,如果是则打印路径并返回1。否则继续向四个方向递归调用dfs函数,如果其中一个方向返回1,则说明找到了一条路径,打印当前位置并返回1。如果所有方向都返回0,则说明无法到达终点,返回0。在主函数中调用dfs函数,并根据返回值判断是否找到了一条路径。
阅读全文