C++生成100x100的数字矩阵迷宫
时间: 2023-11-24 13:05:58 浏览: 153
c++语言制作的数字迷宫
以下是一个生成100x100数字矩阵迷宫的C++程序:
```c++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
const int N = 100; // 迷宫大小
int maze[N][N]; // 迷宫矩阵
void init_maze() {
// 初始化迷宫边界为墙壁
for (int i = 0; i < N; i++) {
maze[0][i] = 1;
maze[N-1][i] = 1;
maze[i][0] = 1;
maze[i][N-1] = 1;
}
// 初始化迷宫内部为通路
for (int i = 1; i < N-1; i++) {
for (int j = 1; j < N-1; j++) {
maze[i][j] = 0;
}
}
}
void gen_maze() {
srand(time(NULL)); // 设置随机种子
int cx = rand() % (N-2) + 1; // 随机起点x坐标
int cy = rand() % (N-2) + 1; // 随机起点y坐标
maze[cy][cx] = 2; // 起点
int dx = 0, dy = 0; // 方向
while (true) {
int dir = rand() % 4; // 随机选择一个方向
switch (dir) {
case 0: dx = 1; dy = 0; break; // 向右
case 1: dx = -1; dy = 0; break; // 向左
case 2: dx = 0; dy = 1; break; // 向下
case 3: dx = 0; dy = -1; break; // 向上
}
int nx = cx + dx, ny = cy + dy; // 下一步的坐标
if (nx < 1 || nx >= N-1 || ny < 1 || ny >= N-1 || maze[ny][nx] != 0) {
continue; // 越界或者已经是通路或者墙壁,重新选择方向
}
maze[ny][nx] = 2; // 标记为通路
maze[cy+dy/2][cx+dx/2] = 2; // 中间也是通路
cx = nx; cy = ny; // 移动
if (cx == 1 && cy == 1) {
break; // 到达终点
}
}
maze[cy][cx] = 3; // 标记为终点
}
void print_maze() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (maze[i][j] == 1) {
cout << "#"; // 墙壁
} else if (maze[i][j] == 2) {
cout << " "; // 通路
} else if (maze[i][j] == 3) {
cout << "E"; // 终点
} else {
cout << "0"; // 其他
}
}
cout << endl;
}
}
int main() {
init_maze(); // 初始化迷宫
gen_maze(); // 生成迷宫
print_maze(); // 输出迷宫
return 0;
}
```
该程序使用随机算法生成迷宫,其中数字2表示通路,数字3表示终点。你可以根据需要修改代码以生成其他大小的迷宫。
阅读全文