用c语言写一个迷宫求解
时间: 2023-11-16 11:06:51 浏览: 92
C语言编写的迷宫求解
好的,下面是一个简单的C语言迷宫求解的代码示例,采用的是深度优先搜索算法:
```c
#include <stdio.h>
#define ROW 10
#define COL 10
int maze[ROW][COL] = {
{1,1,1,1,1,1,1,1,1,1},
{1,0,1,1,0,0,0,1,0,1},
{1,0,0,0,0,1,1,1,0,1},
{1,0,1,1,1,0,0,0,0,1},
{1,0,0,0,1,0,1,1,0,1},
{1,0,1,0,0,0,0,0,0,1},
{1,1,1,1,1,1,0,1,1,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,1,1,1,1,1,1,0,1},
{1,1,1,1,1,1,1,1,1,1}
};
int visited[ROW][COL];
// 深度优先搜索函数
int DFS(int x, int y)
{
if(maze[x][y] == 0) {
visited[x][y] = 1; // 标记为已访问
if(x == ROW - 2 && y == COL - 2) { // 到达终点
return 1;
}
if(DFS(x + 1, y) || DFS(x, y + 1) || DFS(x - 1, y) || DFS(x, y - 1)) { // 向四个方向搜索
return 1;
}
}
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(DFS(1, 1) == 1) { // 从起点(1,1)开始搜索
printf("找到了一条路径!\n");
// 输出迷宫地图和路径
for(i = 0; i < ROW; i++) {
for(j = 0; j < COL; j++) {
if(maze[i][j] == 1) {
printf("# ");
} else if(visited[i][j] == 1) {
printf("* ");
} else {
printf(" ");
}
}
printf("\n");
}
} else {
printf("没有找到路径!\n");
}
return 0;
}
```
这个示例中,我们定义了一个`visited`数组用于标记已经访问过的节点,同时使用递归的方式实现了深度优先搜索算法。在搜索的过程中,如果到达了终点,则返回1表示找到了一条路径;如果搜索完整个迷宫仍然没有找到路径,则返回0。在主函数中,我们根据是否找到路径来输出迷宫地图和路径。
阅读全文