感谢网友forjane
#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);
}
getch();
return 0;
}
正文
递归法生成2D迷宫2007-03-25 19:46:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/yzfy/24276.html
阅读(4833) | 评论(10)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论