老鼠走迷宫1

说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表示老鼠的行走路径,试以程式求出由入口至出口的路径。
解法老鼠的走法有上、左、下、右四个方向,在每前进一格之后就选一个方向前进,无法前进时退回选择下一个可前进方向,如此在阵列中依序测试四个方向,直到走到出口为止,这是递回的基本题,请直接看程式应就可以理解。

#include 
#include 

int visit(int ,int);
int a[9][9]={{2, 2, 2, 2, 2, 2, 2, 2, 2},
             {2, 0, 0, 0, 0, 0, 0, 0, 2},
             {2, 0, 2, 2, 0, 2, 2, 0, 2},
             {2, 0, 2, 0, 0, 2, 0, 0, 2},
             {2, 0, 2, 0, 2, 0, 2, 0, 2},
             {2, 0, 0, 0, 0, 0, 2, 0, 2},
             {2, 2, 0, 2, 2, 0, 2, 2, 2},
             {2, 0, 0, 0, 0, 0, 0, 0, 2},
             {2, 2, 2, 2, 2, 2, 2, 2, 2}};
int starti=1,startj=1;
int endi=7,endj=7;
int flag=0;

int main()
{
   int i,j;
   printf("显示迷宫:\n");
   for(i=0;i<9;i++)
   {
       for(j=0;j<9;j++)
        {
            if(a[i][j]==2) printf("█");
            else printf("  ");
        }
        printf("\n");
   }
   if(visit(starti,startj)==0)
    printf("there is no way!\n");
   else
   {
       printf("显示路径:\n");
       for(i=0;i<9;i++)
        {
          for(j=0;j<9;j++)
           {
             if(a[i][j]==2) printf("█");
             else if(a[i][j]==1) printf("◇");
             else  printf("  ");
           }
          printf("\n");
        }
   }

   return 0;
}

int visit(int i,int j)
{
    a[i][j]=1;
    if(i==endi&&j==endj)
      flag=1;

    if(flag!=1&&a[i+1][j]==0)  visit(i+1,j);
    if(flag!=1&&a[i][j-1]==0)  visit(i,j-1);
    if(flag!=1&&a[i-1][j]==0)  visit(i-1,j);
    if(flag!=1&&a[i][j+1]==0)  visit(i,j+1);

    if(flag==0)
        a[i][j]=0;
    return flag;

}

image.png

你可能感兴趣的:(老鼠走迷宫1)