C语言迷宫求解算法 - 深度优先搜索 (DFS) 实现
当需要解决迷宫问题时,可以使用深度优先搜索 (DFS) 或广度优先搜索 (BFS) 算法来求解。以下是一个使用 C语言 编写的简单迷宫求解程序,它使用递归的深度优先搜索算法来解决迷宫问题。
#include <stdio.h>
#define ROW 5
#define COL 5
int maze[ROW][COL] = {
{1, 0, 1, 1, 1},
{1, 0, 1, 0, 1},
{1, 1, 1, 0, 1},
{0, 0, 0, 0, 1},
{1, 1, 1, 1, 1}
};
int visited[ROW][COL];
int solveMaze(int x, int y) {
if (x == ROW - 1 && y == COL - 1) {
visited[x][y] = 1;
return 1;
}
if (x >= 0 && y >= 0 && x < ROW && y < COL && maze[x][y] == 1 && visited[x][y] == 0) {
visited[x][y] = 1;
if (solveMaze(x + 1, y) == 1) { // 向下移动
return 1;
}
if (solveMaze(x, y + 1) == 1) { // 向右移动
return 1;
}
if (solveMaze(x - 1, y) == 1) { // 向上移动
return 1;
}
if (solveMaze(x, y - 1) == 1) { // 向左移动
return 1;
}
visited[x][y] = 0; // 回溯
return 0;
}
return 0;
}
int main() {
if (solveMaze(0, 0) == 1) {
printf('迷宫可解,路径如下:\n');
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
printf('%d ', visited[i][j]);
}
printf('\n');
}
} else {
printf('迷宫不可解!\n');
}
return 0;
}
首先定义了一个 5x5 的迷宫,迷宫中 1 表示可以通过的路径,0 表示墙壁。solveMaze 函数用于求解迷宫,通过向四个方向递归地尝试移动来找到路径。如果找到了终点,则返回 1,否则返回 0。visited 数组用于记录路径,1 表示已经访问过的路径。
在 main 函数中调用 solveMaze 函数并输出结果。如果迷宫可解,输出路径,否则输出'迷宫不可解'。
请注意,这只是一个简单的迷宫求解示例程序,可以根据实际需求进行修改和扩展。
原文地址: https://www.cveoy.top/t/topic/bN2c 著作权归作者所有。请勿转载和采集!