c语言编写程序:由系统一个随机生成0和1的二维迷宫(0为通路,1为障碍),要求起点跟终点是通的,迷宫存在至少存在一条通路
时间: 2024-05-08 15:22:19 浏览: 216
好的,这是一个有趣的编程问题。我可以为您提供一个C语言程序来生成此类迷宫,并确保起点和终点之间存在通路。以下是代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 10 // 迷宫的行数
#define COL 10 // 迷宫的列数
int maze[ROW][COL]; // 存储迷宫的数组
// 初始化迷宫,将所有格子标记为障碍
void init_maze() {
int i, j;
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
maze[i][j] = 1;
}
}
}
// 在迷宫中随机选择起点和终点,确保它们之间存在通路
void generate_entrance_exit() {
// 选择起点和终点的位置
int start_row = rand() % ROW;
int start_col = rand() % COL;
int end_row, end_col;
do {
end_row = rand() % ROW;
end_col = rand() % COL;
} while (start_row == end_row && start_col == end_col);
maze[start_row][start_col] = 0; // 将起点标记为通路
maze[end_row][end_col] = 0; // 将终点标记为通路
int i, j;
// 从起点开始,使用随机游走算法生成迷宫的通路
i = start_row;
j = start_col;
while (i != end_row || j != end_col) {
// 随机选择一个方向
int direction = rand() % 4;
switch (direction) {
case 0: // 向上走
if (i > 0 && maze[i-1][j] == 1) {
maze[i-1][j] = 0;
i--;
}
break;
case 1: // 向右走
if (j < COL-1 && maze[i][j+1] == 1) {
maze[i][j+1] = 0;
j++;
}
break;
case 2: // 向下走
if (i < ROW-1 && maze[i+1][j] == 1) {
maze[i+1][j] = 0;
i++;
}
break;
case 3: // 向左走
if (j > 0 && maze[i][j-1] == 1) {
maze[i][j-1] = 0;
j--;
}
break;
default:
break;
}
}
}
// 打印迷宫
void print_maze() {
int i, j;
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
if (maze[i][j] == 0) {
printf(" ");
} else {
printf("#");
}
}
printf("\n");
}
}
int main() {
srand(time(NULL)); // 初始化随机数生成器
init_maze();
generate_entrance_exit();
print_maze();
return 0;
}
```
在这个程序中,首先定义了一个`maze`数组来存储迷宫。在`init_maze()`函数中,将所有格子标记为障碍。然后,在`generate_entrance_exit()`函数中,随机选择起点和终点的位置,并确保它们之间存在通路。在本例中,我们使用了随机游走算法来生成迷宫的通路。最后,在`print_maze()`函数中,打印迷宫。
您可以按照以下步骤编译并运行上述代码:
1. 将上述代码保存为名为`maze.c`的文件。
2. 打开终端,并进入保存了`maze.c`文件的目录。
3. 编译代码:`gcc maze.c -o maze`。
4. 运行程序:`./maze`。
程序将随机生成一个迷宫,并将其输出到终端。在生成的迷宫中,空格表示通路,#表示障碍。
阅读全文