数据结构迷宫问题c语言
时间: 2023-07-25 21:18:18 浏览: 64
迷宫问题可以使用深度优先搜索(DFS)或广度优先搜索(BFS)来解决,下面是使用DFS的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define ROW 6
#define COL 6
int maze[ROW][COL] = {
{0, 0, 0, 0, 0, 0},
{0, 1, 1, 0, 1, 0},
{0, 0, 1, 0, 0, 0},
{1, 0, 0, 1, 1, 1},
{0, 1, 0, 0, 0, 0},
{0, 1, 1, 1, 0, 0}
};
bool mark[ROW][COL]; // 标记数组,记录当前位置是否已经走过
void dfs(int x, int y) {
int next[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; // 定义下一步可走的四个方向
if (x == ROW - 1 && y == COL - 1) { // 如果到达终点,输出路径
printf("(%d, %d)\n", x, y);
return;
}
for (int i = 0; i < 4; i++) { // 枚举下一步可走的四个方向
int nx = x + next[i][0];
int ny = y + next[i][1];
if (nx < 0 || nx >= ROW || ny < 0 || ny >= COL) { // 如果下一步越界,则跳过
continue;
}
if (maze[nx][ny] == 0 && !mark[nx][ny]) { // 如果下一步可走且未走过
mark[nx][ny] = true; // 标记为已走过
printf("(%d, %d)\n", x, y); // 输出当前位置
dfs(nx, ny); // 继续搜索下一步
}
}
}
int main() {
mark[0][0] = true; // 标记起点为已走过
dfs(0, 0); // 从起点开始搜索
return 0;
}
```
上述代码中,我们使用一个6x6的二维数组来表示迷宫,其中0表示可走,1表示墙壁。使用一个6x6的布尔型标记数组mark来记录当前位置是否已经走过。在DFS过程中,我们从起点(0,0)开始,枚举下一步可走的四个方向,如果下一步可走且未走过,则标记为已走过,输出当前位置,并继续搜索下一步。直到到达终点(5,5)。