c语言迷宫求解
时间: 2023-06-21 09:08:58 浏览: 41
要编写C语言程序来解决迷宫问题,需要采用搜索算法,通常使用深度优先搜索或广度优先搜索。以下是一个简单的深度优先搜索算法实现:
```
#include <stdio.h>
#include <stdbool.h>
#define MAX_ROW 10
#define MAX_COL 10
char maze[MAX_ROW][MAX_COL] = {
{'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},
{'#', ' ', ' ', ' ', '#', ' ', ' ', ' ', ' ', '#'},
{'#', ' ', '#', ' ', '#', ' ', '#', '#', ' ', '#'},
{'#', ' ', '#', ' ', ' ', ' ', ' ', ' ', ' ', '#'},
{'#', ' ', '#', '#', '#', '#', '#', ' ', '#', '#'},
{'#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#'},
{'#', '#', '#', '#', '#', '#', '#', '#', ' ', '#'},
{'#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#'},
{'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},
};
bool visited[MAX_ROW][MAX_COL];
bool dfs(int x, int y) {
if (maze[x][y] == 'G') {
return true;
}
visited[x][y] = true;
if (maze[x][y] == '#') {
return false;
}
if (x > 0 && !visited[x-1][y] && dfs(x-1, y)) { // 上
return true;
}
if (y > 0 && !visited[x][y-1] && dfs(x, y-1)) { // 左
return true;
}
if (x < MAX_ROW-1 && !visited[x+1][y] && dfs(x+1, y)) { // 下
return true;
}
if (y < MAX_COL-1 && !visited[x][y+1] && dfs(x, y+1)) { // 右
return true;
}
return false;
}
int main() {
int start_x = 1, start_y = 1;
if (dfs(start_x, start_y)) {
printf("找到了出路!\n");
} else {
printf("没有出路!\n");
}
return 0;
}
```
该程序定义了一个10行10列的迷宫,其中'#'表示墙壁,' '表示可走的通道,'S'表示起点,'G'表示终点。程序使用深度优先搜索算法来找到从起点到终点的路径。在搜索过程中,程序使用一个布尔类型的visited数组来记录每个格子是否已经被访问过。如果找到了终点,函数返回true,否则返回false。在主函数中,程序从起点开始搜索,如果找到了出路,则输出"找到了出路!",否则输出"没有出路!"。