解老數走迷宮

  • 1709
  • 0

解老數走迷宮

舊筆記

特點:
不會走己經走過的路,除非是遇到死路,才會往回走.....

 


#include <stdlib.h>
#include <stdio.h>
#include<time.h>
int map[10][10]={{1,1,0,0,0,0,0,0,0,0},    /*地圖*/
                 {0,1,0,1,0,0,0,0,0,0},
                 {0,1,1,1,0,0,0,0,0,0},
                 {0,0,1,0,0,0,0,0,0,0},
                 {0,0,1,1,1,1,0,1,0,0},
                 {0,0,0,0,0,1,1,1,0,0},
                 {0,0,0,1,1,1,0,0,0,0},
                 {0,0,0,1,0,1,1,1,0,0},
                 {0,1,1,1,0,1,0,1,1,1},
                 {0,0,0,1,1,1,0,0,0,1}
                 };
void move(int r,int w){   /*判斷要如何走的函數*/
        int rr,ww,s;
        while(map[9][9]!=2){   /*判斷是否走到出口*/
             rr=r;
             ww=w;
             s=4*rand()/RAND_MAX;    /*用亂數取方向0:上 1:右 2:下 3:左*/
             switch(s){              /*取完亂數將記錄r或W的數先加減*/
                    case 0:
                         rr--;       /*0:上  所以是rr--,ww*/
                         break;
                    case 1:
                         ww++;       /*1:右  所以是rr,ww++*/
                         break;
                    case 2:
                         rr++;      /*2:下  所以是rr++,ww*/
                         break;
                    case 3:
                         ww--;     /*3:左  所以是rr,ww--*/
                         break;
             }
             if(map[r-1][w]!=1 && map[r][w+1]!=1 && map[r+1][w]!=1 && map[r][w-1]!=1){  /*判斷是否己經沒路,是的話就回到上一步(回到上個遞迴)*/
               return;
             }
             else if(rr>=0 && ww>=0 && rr<=9 && ww<=9){   /*判斷亂數取完方向是否在地圖內*/
                   if(map[rr][ww]==1){                    /*判斷亂數取完方向,此方向是否為1,若不是則跳回到while再取,反之就將此步變2再到下個遞迴*/
                     map[rr][ww]=2;
                     r=rr;
                     w=ww;
                     move(r,w);
                   }
                   else{
                       continue;
                   }
             }

        }
        return;
}
void prt(){ /*列印地圖*/
     int i,j;
      for(i=0;i<10;i++){
         for(j=0;j<10;j++){
            printf("%d",map[j]);
         }
         printf("\n");
      }
}
int main()
{
      int r=0,w=0;
      srand(time(NULL));    /*取亂數時要先有這行,這樣取出來的亂數才不會都一樣*/
      printf("原始地圖:\n");
      prt();
      move(r,w);
      printf("走完後地圖:\n");
      prt();
      system("PAUSE");
      return 0;
}