正文

递归法生成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    26char 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;}

阅读(4967) | 评论(10)


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

评论

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