C语言生成10*10的迷宫
时间: 2023-05-24 17:06:41 浏览: 219
本篇回答由 AI 辅助生成
以下是一个生成10*10的迷宫的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define WIDTH 10
#define HEIGHT 10
void printMaze(int maze[][WIDTH]) { // 打印迷宫函数
int i, j;
for (i = 0; i < HEIGHT; i++) {
for (j = 0; j < WIDTH; j++) {
printf("%d ", maze[i][j]);
}
printf("\n");
}
}
void initMaze(int maze[][WIDTH]) { // 初始化迷宫函数
int i, j;
for (i = 0; i < HEIGHT; i++) {
for (j = 0; j < WIDTH; j++) {
maze[i][j] = 1; // 初始化为墙壁
}
}
}
void generateMaze(int maze[][WIDTH], int x, int y) { // 生成迷宫函数
// 定义方向数组
int dx[4] = {0, 1, 0, -1}; // dx 对应 x 方向
int dy[4] = {-1, 0, 1, 0}; // dy 对应 y 方向
// 打乱方向数组
int i, j, k;
for (i = 0; i < 4; i++) {
j = rand() % 4;
k = dx[i]; dx[i] = dx[j]; dx[j] = k;
k = dy[i]; dy[i] = dy[j]; dy[j] = k;
}
// 扫描 4 个方向
for (i = 0; i < 4; i++) {
int nx = x + dx[i]; // 下一个点的 x,y 坐标
int ny = y + dy[i];
if (nx >= 0 && nx < WIDTH && ny >= 0 && ny < HEIGHT && maze[ny][nx] == 1) {
maze[y + dy[i] / 2][x + dx[i] / 2] = 0; // 打通路径
maze[ny][nx] = 0;
generateMaze(maze, nx, ny); // 递归调用,生成更多的路径
}
}
}
int main() {
int maze[HEIGHT][WIDTH];
srand((unsigned)time(NULL)); // 设置随机数种子
initMaze(maze);
maze[0][0] = 0;
generateMaze(maze, 0, 0);
printMaze(maze);
return 0;
}
```
代码说明:
1. 首先定义了迷宫的宽和高。
2. 然后定义了三个函数:打印迷宫函数,初始化迷宫函数和生成迷宫函数。
3. 在主函数中,首先定义一个随机数种子并初始化迷宫,然后在左上角设置一个入口点为通路,并通过递归调用 `generateMaze()` 函数来生成更多的路径。最后,打印迷宫。
运行程序,将输出一个大小为 10*10 的迷宫。其中,0 表示可通行,1 表示墙壁。
阅读全文