编写c语言算法解决迷宫问题(栈、队列或者图的遍历都可以使用)
时间: 2023-10-02 22:02:22 浏览: 79
迷宫问题可以通过使用深度优先搜索(DFS)算法来解决。以下是一个使用C语言编写的算法示例:
```c
#include <stdio.h>
#define ROW 6 // 迷宫行数
#define COL 6 // 迷宫列数
int maze[ROW][COL] = { // 迷宫的二维矩阵
{ 1, 1, 1, 1, 1, 1 },
{ 1, 0, 0, 0, 1, 1 },
{ 1, 1, 1, 0, 1, 1 },
{ 1, 0, 1, 0, 0, 1 },
{ 1, 0, 1, 1, 0, 0 },
{ 1, 1, 1, 1, 1, 1 }
};
int visited[ROW][COL]; // 记录已经访问过的位置
int is_valid(int x, int y) {
if (x >= 0 && x < ROW && y >= 0 && y < COL && maze[x][y] == 0 && visited[x][y] == 0) {
return 1;
}
return 0;
}
int solve_maze(int x, int y) {
if (x == ROW - 1 && y == COL - 1) { // 到达终点
visited[x][y] = 1;
return 1;
}
if (is_valid(x, y)) { // 如果当前位置可行
visited[x][y] = 1; // 标记已访问
if (solve_maze(x, y - 1)) { // 向左搜索
return 1;
}
if (solve_maze(x + 1, y)) { // 向下搜索
return 1;
}
if (solve_maze(x, y + 1)) { // 向右搜索
return 1;
}
if (solve_maze(x - 1, y)) { // 向上搜索
return 1;
}
visited[x][y] = 0; // 标记为未访问
return 0;
}
return 0;
}
int main() {
int i, j;
// 初始化 visited 数组
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
visited[i][j] = 0;
}
}
if (solve_maze(0, 0)) {
printf("迷宫有解\n");
} else {
printf("迷宫无解\n");
}
return 0;
}
```
以上算法使用深度优先搜索遍历迷宫,从起点开始递归地向四个方向探索,直到到达终点或者搜索完所有可行的路径。通过一个`maze`矩阵记录迷宫地图,其中0表示可行路径,1表示墙壁。`visited`数组记录已经访问过的位置,避免重复访问。算法输出结果:如果迷宫有解,则输出"迷宫有解",否则输出"迷宫无解"。
阅读全文