我采用的生成算法如下:
1.随机生成节点
2.适当调节节点之间的疏密
3.连接节点
#include<cstdio>
#include<cmath>
#include<windows.h>
#include<time.h>
#include<cstdlib>
using namespace std;
int random(int a,int b);
int main()
{
srand(time(0));
int m,n,jd,ljq=0,ljq2=0,temp;
scanf("%d%d%d",&m,&n,&jd);
int ljx[m]={},ljy[n]={};
char a[m][n]={};
bool xm[m][n]={},lt[m][n]={};
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
a[i][j]=' ';
if(random(1,m*n)<=jd)
{
a[i][j]='|';
ljq+=1;
}
}
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(a[i][j]=='|')
{
for(int k=(int)-(jd/n)/2;k<=(int)(jd/n)/2;k++)
{
for(int l=(int)-(jd/m)/2;l<=(int)(jd/m)/2;l++)
{
if(a[i+k][j+l]=='|'&&k!=0&&j!=0&&a[i][j]=='|')
{
a[i+k][j+l]==' ';
ljq-=1;
}
}
}
}
}
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(a[i][j]==' ')
{
for(int k=(int)-(jd/n)/2;k<=(int)(jd/n)/2;k++)
{
for(int l=(int)-(jd/m)/2;l<=(int)(jd/m)/2;l++)
{
if(a[i+k][j+l]=='|')
{
ljq2+=1;
}
}
}
if(ljq2==0)
{
a[i+random(-(jd/n)/2,(jd/n)/2)][j+random(-(jd/n)/2,(jd/n)/2)]=='|';
ljq+=1;
}
ljq2=0;
}
}
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(a[i][j]=='|')
{
temp=0;
if(i<jd/n/2)
{
if(j<jd/m/2)
{
for(int k=1;k<=jd/n/2;k++)
{
if(a[i+k][j]=='|')
{
for(int l=1;l<=k;l++)
{
a[i+l][j]='|';
}
}
}
for(int l=1;l<=jd/m/2;l++)
{
if(a[i][j+l]=='|')
{
for(int k=1;k<=l;k++)
{
a[i][j+k]='|';
}
}
}
}
else
{
for(int k=1;k<=jd/n/2;k++)
{
if(a[i+k][j]=='|')
{
for(int l=1;l<=k;l++)
{
a[i+l][j]='|';
}
}
}
for(int l=-(jd/m/2);l<=jd/m/2;l++)
{
if(a[i][j+l]=='|')
{
for(int k=1;k<=l;k++)
{
a[i][j+k]='|';
}
}
}
}
}
else
{
if(j<jd/m/2)
{
for(int k=-(jd/n/2);k<=jd/n/2;k++)
{
if(a[i+k][j]=='|')
{
for(int l=0;l<=k;l++)
{
a[i+l][j]='|';
}
}
}
for(int l=0;l<=jd/m/2;l++)
{
if(a[i][j+l]=='|')
{
for(int k=1;k<=l;k++)
{
a[i][j+k]='|';
}
}
}
}
else
{
for(int k=-(jd/n/2);k<=jd/n/2;k++)
{
if(a[i+k][j]=='|')
{
for(int l=1;l<=k;l++)
{
a[i+l][j]='|';
}
}
}
for(int l=-(jd/m/2);l<=jd/m/2;l++)
{
if(a[i][j+l]=='|')
{
for(int k=1;k<=l;k++)
{
a[i][j+k]='|';
}
}
}
}
}
}
}
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
printf("%c",a[i][j]);
}
printf("\n");
}
system("pause");
return 0;
}
int random(int a,int b)
{
return a+rand()%(b-a+1);
}
无报错,但生成结果如下:
我找了很多遍都没找着错误
求解
#include
#include
#include
#include
using namespace std;
int main()
{
char map[6][6]=
{
{'#','#','#','#','#','#'},
{'#','O',' ','#',' ',' '},
{'#',' ','#','#',' ','#'},
{'#',' ',' ','#',' ','#'},
{'#','#',' ',' ',' ','#'},
{'#','#','#','#','#','#'}
};
for (int i = 0; i <= 5; i++)
{
for (int j = 0; j <= 5; j++)
{
cout << map[i][j];
}
cout << endl;
}
int x,y;
x = 1; y = 1;
while (1)
{
cout << "请输入 w(上) s(下) a(左) d(右)" << endl;
char ch;
cin >> ch;
if (ch == 's' && map[x + 1][y] != '#')
{
map[x][y] = ' ';
x++;
map[x][y] = 'O';
}
if (ch == 'w' && map[x - 1][y] != '#')
{
map[x][y] = ' ';
x--;
map[x][y] = 'O';
}
if (ch == 'a' && map[x][y - 1] != '#')
{
map[x][y] = ' ';
y--;
map[x][y] ='O';
}
if (ch == 'd' && map[x][y + 1] != '#')
{
map[x][y] = ' ';
y++;
map[x][y] = 'O';
}
system("export TERM=xterm && clear");
for (int i = 0; i <= 5; i ++)
{
for (int j = 0; j <= 5; j++)
{
cout << map[i][j];
}
cout << endl;
}
if (x == 1 && y == 5)
{
cout << "恭喜你走出了迷宫" ;
break;
}
}
return 0;
}
谢谢
但是重点是生成迷宫