数据结构迷宫问题c代码
时间: 2024-04-18 18:21:01 浏览: 100
当然,我可以给你介绍一下数据结构迷宫问题的C代码。下面是一个简单的示例:
```c
#include <stdio.h>
#include <stdbool.h>
#define SIZE 5
// 定义迷宫的大小
int maze[SIZE][SIZE] = {
{1, 1, 1, 1, 1},
{0, 0, 1, 0, 1},
{1, 1, 1, 0, 1},
{1, 0, 0, 0, 1},
{1, 1, 1, 1, 1}
};
// 定义迷宫的访问标记
bool visited[SIZE][SIZE];
// 定义迷宫的路径
int path[SIZE * SIZE][2];
int pathLength = 0;
// 判断当前位置是否合法
bool isValid(int x, int y) {
if (x >= 0 && x < SIZE && y >= 0 && y < SIZE && maze[x][y] == 1 && !visited[x][y]) {
return true;
}
return false;
}
// 深度优先搜索解决迷宫问题
bool solveMaze(int x, int y) {
// 判断当前位置是否为终点
if (x == SIZE - 1 && y == SIZE - 1) {
path[pathLength][0] = x;
path[pathLength][1] = y;
pathLength++;
return true;
}
// 判断当前位置是否合法
if (isValid(x, y)) {
// 标记当前位置为已访问
visited[x][y] = true;
// 将当前位置加入路径
path[pathLength][0] = x;
path[pathLength][1] = y;
pathLength++;
// 向下搜索
if (solveMaze(x + 1, y)) {
return true;
}
// 向右搜索
if (solveMaze(x, y + 1)) {
return true;
}
// 向上搜索
if (solveMaze(x - 1, y)) {
return true;
}
// 向左搜索
if (solveMaze(x, y - 1)) {
return true;
}
// 如果四个方向都无法到达终点,则回溯
pathLength--;
visited[x][y] = false;
}
return false;
}
int main() {
// 初始化访问标记数组
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
visited[i][j] = false;
}
}
// 解决迷宫问题
if (solveMaze(0, 0)) {
printf("迷宫的路径为:\n");
for (int i = 0; i < pathLength; i++) {
printf("(%d, %d) ", path[i][0], path[i][1]);
}
printf("\n");
} else {
printf("迷宫无解!\n");
}
return 0;
}
```
这段代码使用深度优先搜索算法解决了迷宫问题。它通过递归地搜索迷宫中的路径,直到找到从起点到终点的路径或者无法找到路径为止。在搜索过程中,使用一个访问标记数组来记录已经访问过的位置,避免重复访问。最后,将找到的路径打印出来。
阅读全文