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

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

    "
    ); 
  64. } 
  65.  
  66. void main1() 
  67. { 
  68.     mgpath(1,1,8,8); 
  69. } 

좋은 웹페이지 즐겨찾기