算法:老鼠走迷宮問題


算法:老鼠走迷宮問題(初)

【寫在前面】

  老鼠走迷宮問題的遞歸實現,是對遞歸思想的一種應用。

【問題描述】

  給定一個二維數組,數組中2表示牆壁,0表示通路,由此數組可展示為一個迷宮圖。給定入口位置和出口位置,判斷之間是否存在通路並顯示出走出迷宮的道路。  

【代碼】

對題目的描述部分

int migo[7][7]={
{2, 2, 2, 2, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 2},
{2, 0, 2, 0, 2, 0, 2},
{2, 0, 0, 0, 0, 2, 2},
{2, 2, 0, 2, 0, 2, 2},
{2, 0, 0, 0, 0, 0, 2},
{2, 2, 2, 2, 2, 2, 2}};//迷宮圖

int startX=1,startY=1;
int endX=5,endY=5;

說明:

    1.給出用來描述迷宮信息的數組。

    2.給出入口和出口坐標。

遞歸的實現部分

int flag=0;

int find(int x,int y)
{
    migo[x][y]=1;
    if(x==endX&&y==endY)
        flag=1;
    if(migo[x][y+1]==0&&flag!=1)
        find(x,y+1);
    if(migo[x][y-1]==0&&flag!=1)
        find(x,y-1);
    if(migo[x+1][y]==0&&flag!=1)
        find(x+1,y);
    if(migo[x-1][y]==0&&flag!=1)
        find(x-1,y);
    if(flag!=1)
        migo[x][y]=0;
    return flag;
}

說明:

    1.第一句代碼 migo[x][y]=1,意義何在呢?我們在開始處把它設為1,表示我們以此為軸開始朝四周移動,每到下一個點便再以之為軸,...不段進行判斷,直達我們找到通路,即flag=1。但是我們需要明白的是,一旦我們沿某條路找不到通路時,最后一句代碼

    便又將其還原為0,在對迷宮的所有道路探索后,我們可能會找到通路,那條路上的每一個元素便會被賦予1,如果都沒有,那就不會。

    2.關於遞歸的思路:不斷以某點為軸,向四處擴散,在找到出口點便停止遞歸。

道路展示實現部分

int main(int argc, char **argv)
{
    int i,j;
    printf("顯示迷宮:\n");
    for(i=0;i<7;i++)
    {
      for(j=0;j<7;j++)
       if(migo[i][j]==2)
        printf("");
       else
        printf(" ");
       printf("\n");
    }
    
     if(find(startX,startY)==0)
     {
      printf("\n沒有找到出口!\n");
     }
     else
     {
      printf("\n顯示路徑:\n");
      for(i=0;i<7;i++)
      {
       for(j=0;j<7;j++)
       {
        if(migo[i][j]==2)
         printf("");
        else if(migo[i][j]==1)
         printf("*");
        else
         printf(" ");
       }
       printf("\n");
      }
     }
     return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM