C语言实现生成随机二维迷宫 1代表墙0代表路
时间: 2024-01-04 17:04:36 浏览: 180
生成随机二维迷宫可以使用深度优先搜索算法(DFS)或广度优先搜索算法(BFS)。下面是一个使用DFS算法生成随机二维迷宫的C语言实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 15 // 迷宫行数
#define COL 15 // 迷宫列数
int maze[ROW][COL];
// DFS算法生成迷宫
void dfs(int x, int y) {
int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; // 右下左上四个方向
int visit[4] = {0, 1, 2, 3}; // 随机打乱方向
srand((unsigned)time(NULL)); // 以时间为种子生成随机数
for (int i = 0; i < 4; i++) {
int r = rand() % 4;
int tmp = visit[i];
visit[i] = visit[r];
visit[r] = tmp;
}
for (int i = 0; i < 4; i++) {
int nx = x + dir[visit[i]][0] * 2; // 横坐标
int ny = y + dir[visit[i]][1] * 2; // 纵坐标
if (nx >= 0 && nx < ROW && ny >= 0 && ny < COL && maze[nx][ny] == 1) {
maze[x + dir[visit[i]][0]][y + dir[visit[i]][1]] = 0;
maze[nx][ny] = 0;
dfs(nx, ny);
}
}
}
int main() {
// 初始化迷宫
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
if (i == 0 || i == ROW - 1 || j == 0 || j == COL - 1) {
maze[i][j] = 1; // 边界设置为墙
} else {
maze[i][j] = 1 - (rand() % 2); // 随机生成路或墙
}
}
}
// 从起点开始生成迷宫
maze[1][0] = 0;
dfs(1, 1);
// 输出迷宫
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
printf("%d ", maze[i][j]);
}
printf("\n");
}
return 0;
}
```
在这个实现中,我们使用DFS算法随机生成迷宫。首先,我们初始化一个ROW行COL列的迷宫,将边界设置为墙,中间随机生成路或墙。然后从起点(1,0)开始生成迷宫,首先打乱四个方向的顺序,然后依次尝试向右、下、左、上四个方向生成迷宫,如果该方向上的下一个格子是未访问过的墙(即值为1),就将其设置为路(即值为0),然后以该格为起点继续递归生成迷宫。最后,输出整个迷宫。
阅读全文