미 로 를 깊이 있 게 옮 겨 다 니 며 해답 을 구하 다

창고 미 로 를 이용 하여 해답 을 구하 다.
 
   
   
   
   
  1. #include  
  2. #define MAXSIZE  150 
  3. struct  
  4.     int i; int j; int di; 
  5. }st[MAXSIZE]; 
  6.  
  7. int mg[10][10] = { 
  8.                 {1,1,1,1,1,1,1,1,1,1}, 
  9.                 {1,0,0,1,0,0,0,1,0,1}, 
  10.                 {1,0,0,1,0,0,0,1,0,1}, 
  11.                 {1,0,0,0,0,1,1,0,0,1}, 
  12.                 {1,0,1,1,1,0,0,0,0,1}, 
  13.                 {1,0,0,0,1,0,0,0,0,1}, 
  14.                 {1,0,1,0,0,0,1,0,0,1}, 
  15.                 {1,0,1,1,1,0,1,1,0,1}, 
  16.                 {1,1,0,0,0,0,0,0,0,1}, 
  17.                 {1,1,1,1,1,1,1,1,1,1} 
  18. }; 
  19.  
  20. void mgpath(int x1, int y1, int x2, int y2) 
  21.     int i,j, di, find, k, top = -1; 
  22.     top++; 
  23.     st[top].i = i = x1; st[top].j = j = y1; st[top].di = di = -1; 
  24.     mg[x1][y1] = -1; 
  25.     while(top > -1) 
  26.     { 
  27.         if(st[top].i == x2 && st[top].j == y2)      //  
  28.         { 
  29.             for(k = 0; k <= top; k++)            
  30.                 printf("i = %d , j = %d , di = %d .
    "
    ,st[k].i, st[k].j, st[k].di);          
  31.             return ; 
  32.         } 
  33.         find = 0;             //   ,   ,  0 ,  
  34.         while(find ==0 && st[top].di 
  35.         { 
  36.             st[top].di ++; 
  37.             switch(st[top].di) 
  38.             { 
  39.                 case 0: 
  40.                     i = st[top].i -1 ; j = st[top].j; if(mg[i][j] == 0) find = 1;break
  41.                 case 1: 
  42.                     i = st[top].i ; j = st[top].j + 1; if(mg[i][j] == 0) find = 1; break
  43.                 case 2: 
  44.                     i = st[top].i + 1; j = st[top].j ; if(mg[i][j] == 0) find = 1; break
  45.                 case 3: 
  46.                     i = st[top].i ; j = st[top].j -1 ; if(mg[i][j] == 0) find = 1; break
  47.             } 
  48.         } 
  49.         if(find == 1) 
  50.         { 
  51.               //   ,  ,  
  52.             top++; 
  53.             st[top].i = i; st[top].j = j; st[top].di = -1;  //  
  54.             mg[i][j] = -1;                                   //  
  55.         }else  
  56.         { 
  57.             mg[st[top].i][st[top].j] = 0;                     // , , , ,  
  58.             top--;                                             //  di     
  59.         } 
  60.     } 
  61.     printf("

    "
    ); 
  62.  
  63. void main1() 
  64.     mgpath(1,1,8,8); 

좋은 웹페이지 즐겨찾기