C语言实现迷宫求解算法:深度优先搜索
本文介绍使用 C 语言实现迷宫求解算法,利用深度优先搜索策略,从迷宫入口出发,按照右、下、左、上的顺序搜索可行路径,最终判断是否存在从入口到出口的路径,并输出路径信息。
问题描述
输入一个迷宫,求从入口通向出口的可行路径。为简化问题,迷宫用二维数组 int maze[10][10] 来存储障碍物的分布,假设迷宫的横向和纵向尺寸的大小是一样的,并由程序运行读入。若读入迷宫大小的值是 n(3<n<=10),则该迷宫横向或纵向尺寸都是 n,规定迷宫最外面的一圈是障碍物,迷宫的入口是 maze[1][1],出口是 maze[n-2][n-2]。若 maze[i][j] = 1 代表该位置是障碍物,若 maze[i][j] = 0 代表该位置是可以行走的空位(0<=i<=n-1, 0<=j<=n-1)。求从入口 maze[1][1] 到出口 maze[n-2][n-2] 可以走通的路径。要求迷宫中只允许在水平或上下四个方向的空位上行走,走过的位置不能重复走,规定必须按向右、向下、向左、向上的顺序向前搜索试探。
代码实现
#include <stdio.h>
#define MAX_SIZE 10
int maze[MAX_SIZE][MAX_SIZE];
int path[MAX_SIZE][MAX_SIZE];
int solveMaze(int x, int y, int size) {
// 到达出口
if (x == size - 2 && y == size - 2) {
path[x][y] = 1;
return 1;
}
// 检查当前位置是否可以通过
if (maze[x][y] == 0 && path[x][y] == 0) {
path[x][y] = 1;
// 向右搜索
if (solveMaze(x, y + 1, size) == 1) {
return 1;
}
// 向下搜索
if (solveMaze(x + 1, y, size) == 1) {
return 1;
}
// 向左搜索
if (solveMaze(x, y - 1, size) == 1) {
return 1;
}
// 向上搜索
if (solveMaze(x - 1, y, size) == 1) {
return 1;
}
// 若四个方向都无法到达出口,则将当前位置标记为不可行
path[x][y] = 0;
return 0;
}
return 0;
}
int main() {
int size;
printf("请输入迷宫的大小(3<n<=10): ");
scanf("%d", &size);
printf("请按行输入迷宫的内容(0表示可行,1表示障碍):
");
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
scanf("%d", &maze[i][j]);
path[i][j] = 0;
}
}
printf("寻找迷宫路径...
");
if (solveMaze(1, 1, size) == 1) {
printf("迷宫路径存在!
");
printf("路径如下:
");
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
printf("%d ", path[i][j]);
}
printf("
");
}
} else {
printf("迷宫路径不存在!
");
}
return 0;
}
代码分析
该代码通过递归的方式搜索迷宫中的路径,从入口开始,按照向右、向下、向左、向上的顺序依次尝试移动。如果某个方向可以到达出口,则返回1。如果四个方向都无法到达出口,则返回0。程序将找到的路径标记在path数组中,其中1表示路径可行,0表示不可行。
函数说明
solveMaze(int x, int y, int size):该函数用于递归搜索迷宫路径,参数x和y代表当前位置的坐标,size代表迷宫的大小。
代码示例
请输入迷宫的大小(3<n<=10): 5
请按行输入迷宫的内容(0表示可行,1表示障碍):
1 1 1 1 1
1 0 0 0 1
1 0 1 0 1
1 0 0 0 1
1 1 1 1 1
寻找迷宫路径...
迷宫路径存在!
路径如下:
0 0 0 0 0
0 1 1 1 0
0 1 0 1 0
0 1 1 1 0
0 0 0 0 0
总结
本文介绍了使用 C 语言实现迷宫求解算法,并给出了代码示例。该算法利用深度优先搜索策略,从入口开始,按照指定的顺序搜索可行路径,最终判断是否存在从入口到出口的路径,并输出路径信息。代码简洁易懂,可以作为学习 C 语言编程和算法的参考。
注意
- 本文中的代码仅供参考,您需要根据具体的需求进行修改和调整。
- 在实际应用中,您可能需要考虑迷宫的复杂程度、效率等因素,选择更合适的算法和数据结构。
原文地址: https://www.cveoy.top/t/topic/cuUq 著作权归作者所有。请勿转载和采集!