迷宫问题c语言
时间: 2023-08-24 09:13:23 浏览: 50
迷宫问题是一个经典的算法问题,可以使用深度优先搜索(DFS)或广度优先搜索(BFS)来解决。下面是一个使用DFS解决迷宫问题的C语言代码示例:
```
#include <stdio.h>
#define ROW 5
#define COL 5
int maze[ROW][COL] = {
{0, 1, 0, 0, 0},
{0, 1, 0, 1, 0},
{0, 0, 0, 0, 0},
{0, 1, 1, 1, 0},
{0, 0, 0, 1, 0}
};
int path[ROW][COL];
int dfs(int x, int y) {
if (x < 0 || x >= ROW || y < 0 || y >= COL || maze[x][y] == 1 || path[x][y] == 1) {
return 0;
}
if (x == ROW - 1 && y == COL - 1) {
path[x][y] = 1;
return 1;
}
path[x][y] = 1;
if (dfs(x + 1, y) || dfs(x, y + 1) || dfs(x - 1, y) || dfs(x, y - 1)) {
return 1;
}
path[x][y] = 0;
return 0;
}
void printPath() {
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
printf("%d ", path[i][j]);
}
printf("\n");
}
}
int main() {
if (dfs(0, 0)) {
printf("找到一条路径:\n");
printPath();
} else {
printf("没有找到路径!\n");
}
return 0;
}
```
在这个示例中,使用一个5x5的迷宫(0表示可以通过,1表示障碍物),从左上角的起点(0,0)开始寻找通往右下角的终点(4,4)的路径。使用path数组来记录走过的路径。
dfs函数实现了深度优先搜索算法,如果当前位置是障碍物或已经走过,返回0;如果当前位置是终点,返回1;否则向四个方向依次搜索,如果有一条路径能够到达终点,返回1。在返回之前,需要将当前位置标记为已经走过,如果没有找到路径,需要将当前位置标记为未走过。
printPath函数用于打印出找到的路径。
在main函数中,先调用dfs函数寻找路径,如果有路径,打印出路径,否则提示没有找到路径。