基本信息
源码名称:利用队列找出迷宫的最优解
源码大小:1.64KB
文件格式:.cpp
开发语言:C/C++
更新时间:2020-04-08
   源码介绍
利用队列找迷宫的最优解,

入口是(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;
}