📄 递归法生成2d迷宫.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAZE_MAXWIDTH 80
#define MAZE_MAXHIGHT 26
char map[MAZE_MAXWIDTH+2][MAZE_MAXHIGHT+2];
void search(int x,int y)
{
static int zadd[4][2]={0,1,1,0,0,-1,-1,0};
int zx=x*2,zy=y*2,next,turn,i;
map[zx][zy]=1; //当前坐标置1
turn=rand()%2? 1:3; //turn=1为顺时针3为逆时针
for(i=0,next=rand()%4;i<4;i++,next=(next+turn)%4)
{
if(map[zx+2*zadd[next][0]][zy+2*zadd[next][1]]==0)
{
map[zx+zadd[next][0]][zy+zadd[next][1]]=1; //中间的路径置1
search(x+zadd[next][0],y+zadd[next][1]); //深搜下一个节点
}
}
}
void Make_Maze(int x,int y)
{
int z1,z2;
for(z1=0,z2=2*y+2;z1<=2*x+2;z1++)
map[z1][0]=1,map[z1][z2]=1;
for(z1=0,z2=2*x+2;z1<=2*y+2;z1++)
map[0][z1]=1,map[z2][z1]=1;
map[1][2]=1; //置入口出口为1
map[2*x+1][2*y]=1;
srand((unsigned)time(NULL));
search(rand()%x+1,rand()%y+1); //从任意节点开始深搜
}
int main()
{
int x=39,y=12,z1,z2;//maze size: 1<=x<=39 ; 1<=y< MAZE_MAXHIGHT/2
Make_Maze(x,y);
for(z2=1;z2<=y*2+1;z2++){ //迷宫图形输出
for(z1=1;z1<=x*2+1;z1++)
if(map[z1][z2]==0)putchar('|');else putchar(32);
if(z2<=y*2)putchar(10);
}
system("pause");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -