用c语言写一个迷宫问题的程序
时间: 2023-11-18 14:05:37 浏览: 155
以下是一个简单的迷宫问题的程序,使用了深度优先搜索算法:
```c
#include <stdio.h>
#include <stdlib.h>
#define ROWS 10
#define COLS 10
// 迷宫地图
int maze[ROWS][COLS] = {
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 0, 0, 1, 0, 0, 0, 1, 0, 1},
{1, 0, 0, 1, 0, 0, 0, 1, 0, 1},
{1, 0, 0, 0, 0, 1, 1, 0, 0, 1},
{1, 0, 1, 1, 1, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 1, 0, 0, 0, 0, 1},
{1, 0, 1, 0, 0, 0, 1, 0, 0, 1},
{1, 0, 1, 1, 1, 0, 1, 1, 0, 1},
{1, 1, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
};
// 标记已访问过的格子
int visited[ROWS][COLS];
// 标记是否找到出口
int found_exit = 0;
// 搜索函数
void search(int row, int col) {
// 如果找到出口,直接返回
if (maze[row][col] == 0 && (row == 0 || row == ROWS - 1 || col == 0 || col == COLS - 1)) {
found_exit = 1;
return;
}
// 标记已访问过
visited[row][col] = 1;
// 搜索上下左右四个方向
if (!found_exit && maze[row-1][col] == 0 && !visited[row-1][col]) {
search(row-1, col);
}
if (!found_exit && maze[row+1][col] == 0 && !visited[row+1][col]) {
search(row+1, col);
}
if (!found_exit && maze[row][col-1] == 0 && !visited[row][col-1]) {
search(row, col-1);
}
if (!found_exit && maze[row][col+1] == 0 && !visited[row][col+1]) {
search(row, col+1);
}
}
int main() {
int i, j;
// 初始化visited数组
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
visited[i][j] = 0;
}
}
// 从起点开始搜索
search(1, 1);
// 输出结果
if (found_exit) {
printf("找到出口!\n");
} else {
printf("没有找到出口!\n");
}
return 0;
}
```
程序中,迷宫地图使用一个二维数组表示,其中1表示障碍物,0表示空地。visited数组用于标记已访问过的格子,found_exit标记是否找到出口。
搜索函数search使用递归实现,如果找到出口,直接返回;否则,标记当前格子为已访问过,然后搜索上下左右四个方向。最后,在主函数中从起点开始调用search函数即可。
阅读全文