//0 way *
//1 final point *
//2 start point *
//3 wall #
//4 start #
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
int maze(int,int);
int k[21][21];
int main(void)
{
int i,j,m;
for(i=0;i<21;i++) //clean
{
for(j=0;j<21;j++)
{
k[i][j]=4;
}
}
for(m=0;m<21;m++) //wall
{
k[0][m]=3;
k[m][0]=3;
k[20][m]=3;
k[m][20]=3;
}
k[1][0]=2; //start point
k[19][20]=1; //final point
randomize();
maze(1,0);
for(int a=0;a<21;a++) //print maze
{
for(int b=0;b<21;b++)
{
if((k[a][b]==0||k[a][b]==1)||(k[a][b]==2))
{
gotoxy(b+1,a+1);
printf("*");
}
else
{
gotoxy(b+1,a+1);
printf("#");
}
}
}
getch();
return 0;
}
int maze(int x,int y) //make maze
{
int r;
int way=0;
r=random(3);
do{switch(r%3)
{
case 2: //up
if((k[x-1][y]==3||k[x-1][y-1]==0)||(k[x-2][y]==0||k[x-1][y+1]==0))
{
r++;
way++;
}
else
{
k[x-1][y]=0;
maze(x-1,y);
}
break;
case 1: //right
if((k[x][y+1]==3||k[x][y+2]==0)||(k[x-1][y+1]==0||k[x+1][y+1]==0))
{
r++;
way++;
}
else
{
k[x][y+1]=0;
maze(x,y+1);
}
break;
case 0: //down
if((k[x+1][y]==3||k[x+1][y-1]==0)||(k[x+2][y]==0||k[x+1][y+1]==0))
{
way++;
r++;
}
else
{
k[x+1][y]=0;
maze(x+1,y);
}
break;
}
}while(way!=3);
return 0;
}
--
[1;32m※ Origin: [33m交大資工鳳凰城資訊站 [37m<bbs.csie.nctu.edu.tw> [m
[1;31m◆ From: [36mu222-192.u61-70.giga.net.tw [m