c 语言生成迷宫
时间: 2023-07-13 19:04:38 浏览: 78
生成迷宫的算法有很多种,其中比较常用的是基于深度优先搜索(DFS)的迷宫生成算法。下面是一个基于DFS的迷宫生成算法的 C 语言实现。
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 10
#define COL 10
#define WALL 1
#define PATH 0
int maze[ROW][COL];
void initMaze() {
// 初始化迷宫,全部置为墙壁
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
maze[i][j] = WALL;
}
}
}
void printMaze() {
// 打印迷宫
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
if (maze[i][j] == WALL) {
printf("▉");
} else {
printf(" ");
}
}
printf("\n");
}
}
void createMaze(int x, int y) {
// 标记当前位置为可通行的路径
maze[x][y] = PATH;
// 定义四个方向的坐标偏移量
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};
// 随机打乱四个方向的顺序
int order[4] = {0, 1, 2, 3};
for (int i = 0; i < 4; i++) {
int j = rand() % 4;
int temp = order[i];
order[i] = order[j];
order[j] = temp;
}
// 遍历四个方向
for (int i = 0; i < 4; i++) {
int nx = x + dx[order[i]];
int ny = y + dy[order[i]];
// 如果新位置在迷宫范围内且是墙壁
if (nx >= 0 && nx < ROW && ny >= 0 && ny < COL && maze[nx][ny] == WALL) {
// 标记当前位置和新位置之间的墙为可通行的路径
maze[x + dx[order[i]] / 2][y + dy[order[i]] / 2] = PATH;
// 递归生成迷宫
createMaze(nx, ny);
}
}
}
int main() {
srand((unsigned)time(NULL));
initMaze();
createMaze(0, 0);
printMaze();
return 0;
}
```
这个算法的基本思路是从起点开始,随机选择一个方向,如果新位置是墙壁,则将当前位置和新位置之间的墙标记为可通行的路径,然后递归地对新位置进行同样的操作,直到所有的位置都被标记为路径。最终得到的迷宫看起来像这样:
```
▉▉▉▉▉▉▉▉▉
▉ ▉ ▉
▉ ▉▉▉▉ ▉
▉ ▉ ▉
▉▉▉▉ ▉ ▉
▉ ▉ ▉
▉ ▉▉▉▉ ▉
▉ ▉ ▉
▉ ▉▉▉▉ ▉
▉ ▉▉▉▉
```