用c语言写出一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍,迷宫的探索方向为8个方向。迷宫问题要求求出从入口(1,1)到出口(m,n)的一条通路,或得出没有通路的结论。
时间: 2023-09-16 19:14:28 浏览: 155
以下是一个简单的示例代码,用C语言实现了一个m x n的迷宫,并使用深度优先搜索算法(DFS)求解从入口到出口的一条通路。
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_SIZE 100
int maze[MAX_SIZE][MAX_SIZE]; // 迷宫
bool visited[MAX_SIZE][MAX_SIZE]; // 标记是否访问过
int m, n; // 迷宫的行数和列数
// 深度优先搜索函数
bool dfs(int x, int y) {
if (x < 1 || x > m || y < 1 || y > n) { // 超出边界
return false;
}
if (maze[x][y] == 1 || visited[x][y]) { // 障碍或已访问
return false;
}
if (x == m && y == n) { // 到达出口
return true;
}
visited[x][y] = true; // 标记为已访问
// 按照8个方向搜索
if (dfs(x-1, y-1) || dfs(x-1, y) || dfs(x-1, y+1) ||
dfs(x, y-1) || dfs(x, y+1) ||
dfs(x+1, y-1) || dfs(x+1, y) || dfs(x+1, y+1)) {
// 找到通路
return true;
}
return false;
}
int main() {
// 读入迷宫的大小
printf("请输入迷宫的行数和列数(用空格分隔):");
scanf("%d %d", &m, &n);
// 读入迷宫的数据
printf("请输入迷宫的数据(0表示通路,1表示障碍):\n");
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
scanf("%d", &maze[i][j]);
}
}
// 搜索从入口到出口的通路
if (dfs(1, 1)) {
printf("从入口到出口存在一条通路。\n");
} else {
printf("从入口到出口不存在通路。\n");
}
return 0;
}
```
需要注意的是,以上代码只是一个简单的实现,对于大规模的迷宫,可能会出现栈溢出等问题,请谨慎使用。
阅读全文