基本信息
源码名称:利用队列找出迷宫的最优解
源码大小:1.64KB
文件格式:.cpp
开发语言:C/C++
更新时间:2020-04-08
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
利用队列找迷宫的最优解,
void print(SqQueue Qu[],int front)
{ int k=0;
for(int i=front;i>0;i=Qu[i].pre)
{
printf("(%d,%d) ",Qu[i].i,Qu[i].j);
k ;
if(k%5==0)
printf("\n");
}
}
bool mgpath1(int xi,int yi,int xe,int ye)
{ int i, j, di, i1, j1;
rear ;
Qu[rear].i=xi; Qu[rear].j=yi; Qu[rear].pre=-1;
mg[xi][yi]=-1;
while(front!=rear)
{ front ;
i=Qu[front].i; j=Qu[front].j;
if (i==xe && j==ye)
{ print(Qu, front);
return true;
}
for (di=0;di<4;di )
{
switch(di)
{
case 0:i1=i-1; j1=j; break;
case 1:i1=i; j1=j 1; break;
case 2:i1=i 1; j1=j; break;
case 3:i1=i; j1=j-1; break;
}
if (mg[i1][j1]==0)
{ rear ;
Qu[rear].i=i1; Qu[rear].j=j1;
Qu[rear].pre=front;
mg[i1][j1]=-1;
}
}
}
return false;
}
利用队列找迷宫的最优解,
入口是(1,1),出口是(M,N)
int mg[M 2][N 2]=
{
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,0,0,1,1,0,0,1},
{1,0,1,1,1,0,0,0,0,1},
{1,0,0,0,1,0,0,0,0,1},
{1,0,1,0,0,0,1,0,0,1},
{1,0,1,1,1,0,1,1,0,1},
{1,1,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}
};
void print(SqQueue Qu[],int front)
{ int k=0;
for(int i=front;i>0;i=Qu[i].pre)
{
printf("(%d,%d) ",Qu[i].i,Qu[i].j);
k ;
if(k%5==0)
printf("\n");
}
}
bool mgpath1(int xi,int yi,int xe,int ye)
{ int i, j, di, i1, j1;
rear ;
Qu[rear].i=xi; Qu[rear].j=yi; Qu[rear].pre=-1;
mg[xi][yi]=-1;
while(front!=rear)
{ front ;
i=Qu[front].i; j=Qu[front].j;
if (i==xe && j==ye)
{ print(Qu, front);
return true;
}
for (di=0;di<4;di )
{
switch(di)
{
case 0:i1=i-1; j1=j; break;
case 1:i1=i; j1=j 1; break;
case 2:i1=i 1; j1=j; break;
case 3:i1=i; j1=j-1; break;
}
if (mg[i1][j1]==0)
{ rear ;
Qu[rear].i=i1; Qu[rear].j=j1;
Qu[rear].pre=front;
mg[i1][j1]=-1;
}
}
}
return false;
}