#include<stdio.h>
#include <stdlib.h>
#include <time.h>
//定义迷宫大小
#define ROW 10
#define COL 10
//定义节点状态
#define WALL 0
#define PATH 1
//初始化迷宫
int maze[ROW][COL] = { {0} };
//生成迷宫
int createMaze(int row, int col)
{
//设置起点和终点
maze[0][0] = PATH;
maze[row - 1][col - 1] = PATH;
//设置当前位置和方向
int x = 0, y = 0, dir = 0;
//定义四个方向上的偏移量
int dx[4] = { 0, 1, 0, -1 };
int dy[4] = { -1, 0, 1, 0 };
//随机生成路径
while (1)
{
//寻找当前节点的邻居节点
int neighbor[4] = { 0 };
int count = 0;
int i;
for (i = 0; i < 4; i++)
{
int nx = x + dx[i];
int ny = y + dy[i];
if (nx >= 0 && nx < row && ny >= 0 && ny < col && maze[nx][ny] == WALL)
{
neighbor[count++] = i;
}
}
//如果当前节点没有可访问的邻居节点,则回溯
if (count == 0)
{
int flag = 0;
for (i = 0; i < 4; i++)
{
int nx = x + dx[i];
int ny = y + dy[i];
if (nx >= 0 && nx < row && ny >= 0 && ny < col && maze[nx][ny] == PATH)
{
neighbor[count++] = i;
flag = 1;
}
}
if (flag == 0) break;
}
//随机选择一个邻居节点
int index = neighbor[rand() % count];
x += dx[index];
y += dy[index];
maze[x][y] = PATH;
}
return 0;
}
//打印迷宫
int printMaze(int row, int col)
{
int i, j;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
if (maze[i][j] == WALL)
printf("■");
if (maze[i][j] == PATH)
printf(" ");
}
printf("\n");
}
return 0;
}
int main()
{
srand(time(NULL)); //初始化随机数生成器
createMaze(ROW, COL);
printMaze(ROW, COL);
return 0;
}
运行后只出现黑窗,无内容