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

评论