c语言迷宫随机生成地图
时间: 2023-08-16 17:27:17 浏览: 113
以下是一个简单的C语言程序,它可以随机生成一个迷宫地图:
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10 // 地图的大小
int map[N][N]; // 地图
void initMap() { // 初始化地图
int i, j;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
map[i][j] = 1; // 1 表示可以通过,0 表示障碍
}
}
}
void printMap() { // 打印地图
int i, j;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%d ", map[i][j]);
}
printf("\n");
}
}
void buildMaze() { // 生成迷宫
int i, j, x, y;
int d[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; // 方向数组
srand((unsigned)time(NULL)); // 设置随机数种子
x = rand() % N; // 随机起点
y = rand() % N;
map[x][y] = 0; // 设置起点为障碍
while (1) {
int flag = 0; // 标记是否还存在可以拓展的区域
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
if (map[i][j] == 0) { // 如果当前位置是障碍
for (int k = 0; k < 4; k++) { // 随机拓展四个方向
int nx = i + d[k][0];
int ny = j + d[k][1];
if (nx >= 0 && nx < N && ny >= 0 && ny < N && map[nx][ny] == 1) { // 如果可以拓展
flag = 1;
map[nx][ny] = 0; // 设置为障碍
}
}
}
}
}
if (!flag) {
break; // 如果不存在可以拓展的区域,退出循环
}
}
}
int main() {
initMap(); // 初始化地图
buildMaze(); // 生成迷宫
printMap(); // 打印地图
return 0;
}
```
这个程序中,我们使用一个二维数组来表示地图,1表示可以通过,0表示障碍。首先我们初始化地图,然后随机选择一个起点,并将其设置为障碍。接下来,我们不断拓展障碍,直到不存在可以拓展的区域为止。在每次拓展时,我们随机选择四个方向之一,如果该方向上的位置是可以通过的,则将其设置为障碍。最终,我们得到了一个随机生成的迷宫地图。
阅读全文