Bir Şövalyenin hedefe ulaşması için gereken minimum adımlar | 2'yi ayarla

Bir Şövalyenin hedefe ulaşması için gereken minimum adımlar | 2'yi ayarla

N x N boyutunda kare bir satranç tahtası verildiğinde At'ın konumu ve hedefin konumu verilir; görev, At'ın hedef konuma ulaşmak için atacağı minimum adımları bulmaktır.
 

Bir Şövalyenin hedefe ulaşması için gereken minimum adımlar | 2


Örnekler: 
 

Input : (2 4) - knight's position (6 4) - target cell Output : 2 Input : (4 5) (1 1) Output : 3 


 


Yukarıdaki sorunu çözmek için bir BFS yaklaşımı zaten tartışılmıştır. öncesi postalamak. Bu yazıda Dinamik Programlama çözümü tartışılmaktadır.
Yaklaşımın açıklaması:  
 

    Durum 1: Hedef şövalye pozisyonunun bir satırında veya bir sütununda değilse. 
    8 x 8 hücreli bir satranç tahtası olsun. Şimdi atın (3 3)'te olduğunu ve hedefin (7 8)'de olduğunu varsayalım. Atın mevcut konumundan itibaren olası 8 hamle vardır, yani (2 1) (1 2) (4 1) (1 4) (5 2) (2 5) (5 4) (4 5). Ancak bu hamlelerden sadece ikisi (5 4) ve (4 5) hedefe doğru olacak, diğerleri ise hedeften uzaklaşacaktır. Yani minimum adımları bulmak için (4 5) veya (5 4)'e gidin. Şimdi hedefe ulaşmak için (4 5) ve (5 4)'ten atılan minimum adımları hesaplayın. Bu dinamik programlamayla hesaplanır. Böylece bu, (3 3)'ten (7 8)'e kadar olan minimum adımlarla sonuçlanır. Durum 2: Hedef şövalye pozisyonunun bir satırında veya bir sütunundaysa. 
    8 x 8 hücreli bir satranç tahtası olsun. Şimdi atın (4 3)'te olduğunu ve hedefin (4 7)'de olduğunu varsayalım. Mümkün olan 8 hareket vardır ancak hedefe doğru yalnızca 4 hareket vardır, yani (5 5) (3 5) (2 4) (6 4). Çünkü (5 5) (3 5)'e ve (2 4) (6 4)'e eşittir. Yani bu 4 noktadan 2 noktaya dönüştürülebilir. (5 5) ve (6 4) (burada) alınarak. Şimdi bu iki noktadan hedefe ulaşmak için atılacak minimum adımları hesaplayın. Bu dinamik programlamayla hesaplanır. Böylece bu, (4 3)'ten (4 7)'ye kadar olan minimum adımlarla sonuçlanır.


İstisna : At köşede olduğunda ve hedef, x ve y koordinatlarının atın konumuyla farkı (1 1) veya tam tersi olacak şekilde olduğunda. O zaman minimum adımlar 4 olacaktır.
Dinamik Programlama Denklemi: 
 

1) dp[diffOfX][diffOfY] At pozisyonundan hedef pozisyonuna atılan minimum adımdır.
2) dp[diffOfX][diffOfY] = dp[diffOfY][diffOfX] .
burada diffOfX = şövalyenin x koordinatı ile hedefin x koordinatı arasındaki fark 
diffOfY = şövalyenin y koordinatı ile hedefin y koordinatı arasındaki fark 
 


Aşağıda yukarıdaki yaklaşımın uygulanması yer almaktadır: 
 

C++
   // C++ code for minimum steps for   // a knight to reach target position   #include          using     namespace     std  ;   // initializing the matrix.   int     dp  [  8  ][  8  ]     =     {     0     };   int     getsteps  (  int     x       int     y           int     tx       int     ty  )   {      // if knight is on the target       // position return 0.      if     (  x     ==     tx     &&     y     ==     ty  )      return     dp  [  0  ][  0  ];      else     {          // if already calculated then return      // that value. Taking absolute difference.      if     (  dp  [  abs  (  x     -     tx  )][  abs  (  y     -     ty  )]     !=     0  )      return     dp  [  abs  (  x     -     tx  )][  abs  (  y     -     ty  )];          else     {      // there will be two distinct positions      // from the knight towards a target.      // if the target is in same row or column      // as of knight then there can be four      // positions towards the target but in that      // two would be the same and the other two      // would be the same.      int     x1       y1       x2       y2  ;          // (x1 y1) and (x2 y2) are two positions.      // these can be different according to situation.      // From position of knight the chess board can be      // divided into four blocks i.e.. N-E E-S S-W W-N .      if     (  x      <=     tx  )     {      if     (  y      <=     ty  )     {      x1     =     x     +     2  ;      y1     =     y     +     1  ;      x2     =     x     +     1  ;      y2     =     y     +     2  ;      }     else     {      x1     =     x     +     2  ;      y1     =     y     -     1  ;      x2     =     x     +     1  ;      y2     =     y     -     2  ;      }      }     else     {      if     (  y      <=     ty  )     {      x1     =     x     -     2  ;      y1     =     y     +     1  ;      x2     =     x     -     1  ;      y2     =     y     +     2  ;      }     else     {      x1     =     x     -     2  ;      y1     =     y     -     1  ;      x2     =     x     -     1  ;      y2     =     y     -     2  ;      }      }          // ans will be 1 + minimum of steps       // required from (x1 y1) and (x2 y2).      dp  [  abs  (  x     -     tx  )][  abs  (  y     -     ty  )]     =         min  (  getsteps  (  x1       y1       tx       ty  )         getsteps  (  x2       y2       tx       ty  ))     +     1  ;          // exchanging the coordinates x with y of both      // knight and target will result in same ans.      dp  [  abs  (  y     -     ty  )][  abs  (  x     -     tx  )]     =         dp  [  abs  (  x     -     tx  )][  abs  (  y     -     ty  )];      return     dp  [  abs  (  x     -     tx  )][  abs  (  y     -     ty  )];      }      }   }   // Driver Code   int     main  ()   {      int     i       n       x       y       tx       ty       ans  ;          // size of chess board n*n      n     =     100  ;          // (x y) coordinate of the knight.      // (tx ty) coordinate of the target position.      x     =     4  ;      y     =     5  ;      tx     =     1  ;      ty     =     1  ;      // (Exception) these are the four corner points       // for which the minimum steps is 4.      if     ((  x     ==     1     &&     y     ==     1     &&     tx     ==     2     &&     ty     ==     2  )     ||         (  x     ==     2     &&     y     ==     2     &&     tx     ==     1     &&     ty     ==     1  ))      ans     =     4  ;      else     if     ((  x     ==     1     &&     y     ==     n     &&     tx     ==     2     &&     ty     ==     n     -     1  )     ||      (  x     ==     2     &&     y     ==     n     -     1     &&     tx     ==     1     &&     ty     ==     n  ))      ans     =     4  ;      else     if     ((  x     ==     n     &&     y     ==     1     &&     tx     ==     n     -     1     &&     ty     ==     2  )     ||         (  x     ==     n     -     1     &&     y     ==     2     &&     tx     ==     n     &&     ty     ==     1  ))      ans     =     4  ;      else     if     ((  x     ==     n     &&     y     ==     n     &&     tx     ==     n     -     1     &&     ty     ==     n     -     1  )     ||         (  x     ==     n     -     1     &&     y     ==     n     -     1     &&     tx     ==     n     &&     ty     ==     n  ))      ans     =     4  ;      else     {      // dp[a][b] here a b is the difference of      // x & tx and y & ty respectively.      dp  [  1  ][  0  ]     =     3  ;      dp  [  0  ][  1  ]     =     3  ;      dp  [  1  ][  1  ]     =     2  ;      dp  [  2  ][  0  ]     =     2  ;      dp  [  0  ][  2  ]     =     2  ;      dp  [  2  ][  1  ]     =     1  ;      dp  [  1  ][  2  ]     =     1  ;      ans     =     getsteps  (  x       y       tx       ty  );      }      cout      < <     ans      < <     endl  ;      return     0  ;   }   
Java
   //Java code for minimum steps for    // a knight to reach target position    public     class   GFG     {   // initializing the matrix.       static     int     dp  [][]     =     new     int  [  8  ][  8  ]  ;      static     int     getsteps  (  int     x       int     y        int     tx       int     ty  )     {      // if knight is on the target       // position return 0.       if     (  x     ==     tx     &&     y     ==     ty  )     {      return     dp  [  0  ][  0  ]  ;      }     else     // if already calculated then return       // that value. Taking absolute difference.       if     (  dp  [     Math  .  abs  (  x     -     tx  )  ][     Math  .  abs  (  y     -     ty  )  ]     !=     0  )     {      return     dp  [     Math  .  abs  (  x     -     tx  )  ][     Math  .  abs  (  y     -     ty  )  ]  ;      }     else     {      // there will be two distinct positions       // from the knight towards a target.       // if the target is in same row or column       // as of knight then there can be four       // positions towards the target but in that       // two would be the same and the other two       // would be the same.       int     x1       y1       x2       y2  ;      // (x1 y1) and (x2 y2) are two positions.       // these can be different according to situation.       // From position of knight the chess board can be       // divided into four blocks i.e.. N-E E-S S-W W-N .       if     (  x      <=     tx  )     {      if     (  y      <=     ty  )     {      x1     =     x     +     2  ;      y1     =     y     +     1  ;      x2     =     x     +     1  ;      y2     =     y     +     2  ;      }     else     {      x1     =     x     +     2  ;      y1     =     y     -     1  ;      x2     =     x     +     1  ;      y2     =     y     -     2  ;      }      }     else     if     (  y      <=     ty  )     {      x1     =     x     -     2  ;      y1     =     y     +     1  ;      x2     =     x     -     1  ;      y2     =     y     +     2  ;      }     else     {      x1     =     x     -     2  ;      y1     =     y     -     1  ;      x2     =     x     -     1  ;      y2     =     y     -     2  ;      }      // ans will be 1 + minimum of steps       // required from (x1 y1) and (x2 y2).       dp  [     Math  .  abs  (  x     -     tx  )  ][     Math  .  abs  (  y     -     ty  )  ]      =     Math  .  min  (  getsteps  (  x1       y1       tx       ty  )      getsteps  (  x2       y2       tx       ty  ))     +     1  ;      // exchanging the coordinates x with y of both       // knight and target will result in same ans.       dp  [     Math  .  abs  (  y     -     ty  )  ][     Math  .  abs  (  x     -     tx  )  ]      =     dp  [     Math  .  abs  (  x     -     tx  )  ][     Math  .  abs  (  y     -     ty  )  ]  ;      return     dp  [     Math  .  abs  (  x     -     tx  )  ][     Math  .  abs  (  y     -     ty  )  ]  ;      }      }   // Driver Code       static     public     void     main  (  String  []     args  )     {      int     i       n       x       y       tx       ty       ans  ;      // size of chess board n*n       n     =     100  ;      // (x y) coordinate of the knight.       // (tx ty) coordinate of the target position.       x     =     4  ;      y     =     5  ;      tx     =     1  ;      ty     =     1  ;      // (Exception) these are the four corner points       // for which the minimum steps is 4.       if     ((  x     ==     1     &&     y     ==     1     &&     tx     ==     2     &&     ty     ==     2  )      ||     (  x     ==     2     &&     y     ==     2     &&     tx     ==     1     &&     ty     ==     1  ))     {      ans     =     4  ;      }     else     if     ((  x     ==     1     &&     y     ==     n     &&     tx     ==     2     &&     ty     ==     n     -     1  )      ||     (  x     ==     2     &&     y     ==     n     -     1     &&     tx     ==     1     &&     ty     ==     n  ))     {      ans     =     4  ;      }     else     if     ((  x     ==     n     &&     y     ==     1     &&     tx     ==     n     -     1     &&     ty     ==     2  )      ||     (  x     ==     n     -     1     &&     y     ==     2     &&     tx     ==     n     &&     ty     ==     1  ))     {      ans     =     4  ;      }     else     if     ((  x     ==     n     &&     y     ==     n     &&     tx     ==     n     -     1     &&     ty     ==     n     -     1  )      ||     (  x     ==     n     -     1     &&     y     ==     n     -     1     &&     tx     ==     n     &&     ty     ==     n  ))     {      ans     =     4  ;      }     else     {      // dp[a][b] here a b is the difference of       // x & tx and y & ty respectively.       dp  [  1  ][  0  ]     =     3  ;      dp  [  0  ][  1  ]     =     3  ;      dp  [  1  ][  1  ]     =     2  ;      dp  [  2  ][  0  ]     =     2  ;      dp  [  0  ][  2  ]     =     2  ;      dp  [  2  ][  1  ]     =     1  ;      dp  [  1  ][  2  ]     =     1  ;      ans     =     getsteps  (  x       y       tx       ty  );      }      System  .  out  .  println  (  ans  );      }   }   /*This code is contributed by PrinciRaj1992*/   
Python3
   # Python3 code for minimum steps for   # a knight to reach target position   # initializing the matrix.   dp   =   [[  0   for   i   in   range  (  8  )]   for   j   in   range  (  8  )];   def   getsteps  (  x     y     tx     ty  ):   # if knight is on the target   # position return 0.   if   (  x   ==   tx   and   y   ==   ty  ):   return   dp  [  0  ][  0  ];   # if already calculated then return   # that value. Taking absolute difference.   elif  (  dp  [  abs  (  x   -   tx  )][  abs  (  y   -   ty  )]   !=   0  ):   return   dp  [  abs  (  x   -   tx  )][  abs  (  y   -   ty  )];   else  :   # there will be two distinct positions   # from the knight towards a target.   # if the target is in same row or column   # as of knight then there can be four   # positions towards the target but in that   # two would be the same and the other two   # would be the same.   x1     y1     x2     y2   =   0     0     0     0  ;   # (x1 y1) and (x2 y2) are two positions.   # these can be different according to situation.   # From position of knight the chess board can be   # divided into four blocks i.e.. N-E E-S S-W W-N .   if   (  x    <=   tx  ):   if   (  y    <=   ty  ):   x1   =   x   +   2  ;   y1   =   y   +   1  ;   x2   =   x   +   1  ;   y2   =   y   +   2  ;   else  :   x1   =   x   +   2  ;   y1   =   y   -   1  ;   x2   =   x   +   1  ;   y2   =   y   -   2  ;   elif   (  y    <=   ty  ):   x1   =   x   -   2  ;   y1   =   y   +   1  ;   x2   =   x   -   1  ;   y2   =   y   +   2  ;   else  :   x1   =   x   -   2  ;   y1   =   y   -   1  ;   x2   =   x   -   1  ;   y2   =   y   -   2  ;   # ans will be 1 + minimum of steps   # required from (x1 y1) and (x2 y2).   dp  [  abs  (  x   -   tx  )][  abs  (  y   -   ty  )]   =    min  (  getsteps  (  x1     y1     tx     ty  )   getsteps  (  x2     y2     tx     ty  ))   +   1  ;   # exchanging the coordinates x with y of both   # knight and target will result in same ans.   dp  [  abs  (  y   -   ty  )][  abs  (  x   -   tx  )]   =    dp  [  abs  (  x   -   tx  )][  abs  (  y   -   ty  )];   return   dp  [  abs  (  x   -   tx  )][  abs  (  y   -   ty  )];   # Driver Code   if   __name__   ==   '__main__'  :   # size of chess board n*n   n   =   100  ;   # (x y) coordinate of the knight.   # (tx ty) coordinate of the target position.   x   =   4  ;   y   =   5  ;   tx   =   1  ;   ty   =   1  ;   # (Exception) these are the four corner points   # for which the minimum steps is 4.   if   ((  x   ==   1   and   y   ==   1   and   tx   ==   2   and   ty   ==   2  )   or   (  x   ==   2   and   y   ==   2   and   tx   ==   1   and   ty   ==   1  )):   ans   =   4  ;   elif   ((  x   ==   1   and   y   ==   n   and   tx   ==   2   and   ty   ==   n   -   1  )   or   (  x   ==   2   and   y   ==   n   -   1   and   tx   ==   1   and   ty   ==   n  )):   ans   =   4  ;   elif   ((  x   ==   n   and   y   ==   1   and   tx   ==   n   -   1   and   ty   ==   2  )   or   (  x   ==   n   -   1   and   y   ==   2   and   tx   ==   n   and   ty   ==   1  )):   ans   =   4  ;   elif   ((  x   ==   n   and   y   ==   n   and   tx   ==   n   -   1   and   ty   ==   n   -   1  )   or   (  x   ==   n   -   1   and   y   ==   n   -   1   and   tx   ==   n   and   ty   ==   n  )):   ans   =   4  ;   else  :   # dp[a][b] here a b is the difference of   # x & tx and y & ty respectively.   dp  [  1  ][  0  ]   =   3  ;   dp  [  0  ][  1  ]   =   3  ;   dp  [  1  ][  1  ]   =   2  ;   dp  [  2  ][  0  ]   =   2  ;   dp  [  0  ][  2  ]   =   2  ;   dp  [  2  ][  1  ]   =   1  ;   dp  [  1  ][  2  ]   =   1  ;   ans   =   getsteps  (  x     y     tx     ty  );   print  (  ans  );   # This code is contributed by PrinciRaj1992   
C#
   // C# code for minimum steps for    // a knight to reach target position    using     System  ;   public     class     GFG  {   // initializing the matrix.       static     int     [          ]  dp     =     new     int  [  8          8  ];         static     int     getsteps  (  int     x       int     y           int     tx       int     ty  )     {         // if knight is on the target       // position return 0.       if     (  x     ==     tx     &&     y     ==     ty  )     {         return     dp  [  0          0  ];         }     else     // if already calculated then return       // that value. Taking Absolute difference.       if     (  dp  [     Math  .     Abs  (  x     -     tx  )          Math  .     Abs  (  y     -     ty  )]     !=     0  )     {         return     dp  [     Math  .     Abs  (  x     -     tx  )          Math  .     Abs  (  y     -     ty  )];         }     else     {         // there will be two distinct positions       // from the knight towards a target.       // if the target is in same row or column       // as of knight then there can be four       // positions towards the target but in that       // two would be the same and the other two       // would be the same.       int     x1       y1       x2       y2  ;         // (x1 y1) and (x2 y2) are two positions.       // these can be different according to situation.       // From position of knight the chess board can be       // divided into four blocks i.e.. N-E E-S S-W W-N .       if     (  x      <=     tx  )     {         if     (  y      <=     ty  )     {         x1     =     x     +     2  ;         y1     =     y     +     1  ;         x2     =     x     +     1  ;         y2     =     y     +     2  ;         }     else     {         x1     =     x     +     2  ;         y1     =     y     -     1  ;         x2     =     x     +     1  ;         y2     =     y     -     2  ;         }         }     else     if     (  y      <=     ty  )     {         x1     =     x     -     2  ;         y1     =     y     +     1  ;         x2     =     x     -     1  ;         y2     =     y     +     2  ;         }     else     {         x1     =     x     -     2  ;         y1     =     y     -     1  ;         x2     =     x     -     1  ;         y2     =     y     -     2  ;         }         // ans will be 1 + minimum of steps       // required from (x1 y1) and (x2 y2).       dp  [     Math  .     Abs  (  x     -     tx  )          Math  .     Abs  (  y     -     ty  )]         =     Math  .  Min  (  getsteps  (  x1       y1       tx       ty  )         getsteps  (  x2       y2       tx       ty  ))     +     1  ;         // exchanging the coordinates x with y of both       // knight and target will result in same ans.       dp  [     Math  .     Abs  (  y     -     ty  )          Math  .     Abs  (  x     -     tx  )]         =     dp  [     Math  .     Abs  (  x     -     tx  )          Math  .     Abs  (  y     -     ty  )];         return     dp  [     Math  .     Abs  (  x     -     tx  )          Math  .     Abs  (  y     -     ty  )];         }         }      // Driver Code       static     public     void     Main  ()     {         int     i       n       x       y       tx       ty       ans  ;         // size of chess board n*n       n     =     100  ;         // (x y) coordinate of the knight.       // (tx ty) coordinate of the target position.       x     =     4  ;         y     =     5  ;         tx     =     1  ;         ty     =     1  ;         // (Exception) these are the four corner points       // for which the minimum steps is 4.       if     ((  x     ==     1     &&     y     ==     1     &&     tx     ==     2     &&     ty     ==     2  )         ||     (  x     ==     2     &&     y     ==     2     &&     tx     ==     1     &&     ty     ==     1  ))     {         ans     =     4  ;         }     else     if     ((  x     ==     1     &&     y     ==     n     &&     tx     ==     2     &&     ty     ==     n     -     1  )         ||     (  x     ==     2     &&     y     ==     n     -     1     &&     tx     ==     1     &&     ty     ==     n  ))     {         ans     =     4  ;         }     else     if     ((  x     ==     n     &&     y     ==     1     &&     tx     ==     n     -     1     &&     ty     ==     2  )         ||     (  x     ==     n     -     1     &&     y     ==     2     &&     tx     ==     n     &&     ty     ==     1  ))     {         ans     =     4  ;         }     else     if     ((  x     ==     n     &&     y     ==     n     &&     tx     ==     n     -     1     &&     ty     ==     n     -     1  )         ||     (  x     ==     n     -     1     &&     y     ==     n     -     1     &&     tx     ==     n     &&     ty     ==     n  ))     {         ans     =     4  ;         }     else     {         // dp[a  b] here a b is the difference of       // x & tx and y & ty respectively.       dp  [  1          0  ]     =     3  ;         dp  [  0          1  ]     =     3  ;         dp  [  1          1  ]     =     2  ;         dp  [  2          0  ]     =     2  ;         dp  [  0          2  ]     =     2  ;         dp  [  2          1  ]     =     1  ;         dp  [  1          2  ]     =     1  ;         ans     =     getsteps  (  x       y       tx       ty  );         }         Console  .  WriteLine  (  ans  );         }      }      /*This code is contributed by PrinciRaj1992*/   
JavaScript
    <  script  >   // JavaScript code for minimum steps for   // a knight to reach target position   // initializing the matrix.   let     dp     =     new     Array  (  8  )   for  (  let     i  =  0  ;  i   <  8  ;  i  ++  ){      dp  [  i  ]     =     new     Array  (  8  ).  fill  (  0  )   }   function     getsteps  (  x    y    tx    ty  )   {      // if knight is on the target      // position return 0.      if     (  x     ==     tx     &&     y     ==     ty  )      return     dp  [  0  ][  0  ];      else     {          // if already calculated then return      // that value. Taking absolute difference.      if     (  dp  [(  Math  .  abs  (  x     -     tx  ))][(  Math  .  abs  (  y     -     ty  ))]     !=     0  )      return     dp  [(  Math  .  abs  (  x     -     tx  ))][(  Math  .  abs  (  y     -     ty  ))];          else     {      // there will be two distinct positions      // from the knight towards a target.      // if the target is in same row or column      // as of knight then there can be four      // positions towards the target but in that      // two would be the same and the other two      // would be the same.      let     x1       y1       x2       y2  ;          // (x1 y1) and (x2 y2) are two positions.      // these can be different according to situation.      // From position of knight the chess board can be      // divided into four blocks i.e.. N-E E-S S-W W-N .      if     (  x      <=     tx  )     {      if     (  y      <=     ty  )     {      x1     =     x     +     2  ;      y1     =     y     +     1  ;      x2     =     x     +     1  ;      y2     =     y     +     2  ;      }     else     {      x1     =     x     +     2  ;      y1     =     y     -     1  ;      x2     =     x     +     1  ;      y2     =     y     -     2  ;      }      }     else     {      if     (  y      <=     ty  )     {      x1     =     x     -     2  ;      y1     =     y     +     1  ;      x2     =     x     -     1  ;      y2     =     y     +     2  ;      }     else     {      x1     =     x     -     2  ;      y1     =     y     -     1  ;      x2     =     x     -     1  ;      y2     =     y     -     2  ;      }      }          // ans will be 1 + minimum of steps      // required from (x1 y1) and (x2 y2).      dp  [(  Math  .  abs  (  x     -     tx  ))][(  Math  .  abs  (  y     -     ty  ))]     =      Math  .  min  (  getsteps  (  x1       y1       tx       ty  )      getsteps  (  x2       y2       tx       ty  ))     +     1  ;          // exchanging the coordinates x with y of both      // knight and target will result in same ans.      dp  [(  Math  .  abs  (  y     -     ty  ))][(  Math  .  abs  (  x     -     tx  ))]     =      dp  [(  Math  .  abs  (  x     -     tx  ))][(  Math  .  abs  (  y     -     ty  ))];      return     dp  [(  Math  .  abs  (  x     -     tx  ))][(  Math  .  abs  (  y     -     ty  ))];      }      }   }   // Driver Code   let     i       n       x       y       tx       ty       ans  ;   // size of chess board n*n   n     =     100  ;   // (x y) coordinate of the knight.   // (tx ty) coordinate of the target position.   x     =     4  ;   y     =     5  ;   tx     =     1  ;   ty     =     1  ;   // (Exception) these are the four corner points   // for which the minimum steps is 4.   if     ((  x     ==     1     &&     y     ==     1     &&     tx     ==     2     &&     ty     ==     2  )     ||   (  x     ==     2     &&     y     ==     2     &&     tx     ==     1     &&     ty     ==     1  ))      ans     =     4  ;   else     if     ((  x     ==     1     &&     y     ==     n     &&     tx     ==     2     &&     ty     ==     n     -     1  )     ||      (  x     ==     2     &&     y     ==     n     -     1     &&     tx     ==     1     &&     ty     ==     n  ))      ans     =     4  ;   else     if     ((  x     ==     n     &&     y     ==     1     &&     tx     ==     n     -     1     &&     ty     ==     2  )     ||      (  x     ==     n     -     1     &&     y     ==     2     &&     tx     ==     n     &&     ty     ==     1  ))      ans     =     4  ;   else     if     ((  x     ==     n     &&     y     ==     n     &&     tx     ==     n     -     1     &&     ty     ==     n     -     1  )     ||      (  x     ==     n     -     1     &&     y     ==     n     -     1     &&     tx     ==     n     &&     ty     ==     n  ))      ans     =     4  ;   else      {   // dp[a][b] here a b is the difference of   // x & tx and y & ty respectively.      dp  [  1  ][  0  ]     =     3  ;      dp  [  0  ][  1  ]     =     3  ;      dp  [  1  ][  1  ]     =     2  ;      dp  [  2  ][  0  ]     =     2  ;      dp  [  0  ][  2  ]     =     2  ;      dp  [  2  ][  1  ]     =     1  ;      dp  [  1  ][  2  ]     =     1  ;      ans     =     getsteps  (  x       y       tx       ty  );   }   document  .  write  (  ans    ' 
'
); // This code is contributed by shinjanpatra. < /script>

Çıkış:  
3 

 

Zaman Karmaşıklığı: O(N * M) burada N, toplam satır sayısı ve M, toplam sütun sayısıdır
Yardımcı Alan: Ç(N * E) 

Test Oluştur