正文

递归法生成2D迷宫2007-03-25 19:46:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/yzfy/24276.html

分享到:

感谢网友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;
}

阅读(4833) | 评论(10)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册