求解:尝试生成迷宫,但是生成不了

我采用的生成算法如下:
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;
}

谢谢
但是重点是生成迷宫