📜  国王在国际象棋棋盘中到达目的地所需的最少移动次数

📅  最后修改于: 2021-05-04 23:08:47             🧑  作者: Mango

给定四个整数sourceXsourceYdestinationXdestinationY ,它们表示棋盘上的源坐标和目标坐标。任务是找到国王从源头到目的地所需的最少移动次数。
国王可以移动到与国王当前所在的正方形具有共同边或共同顶点的正方形(通常可以移动到8个不同的正方形)。


使用L,R,U,D,LU,LD,RU和RD的打印路径,其中L,R,U和D分别代表左,右,上和下。

例子:

方法:沿对角线方向向目的地移动,直到国王到达与目的地相同的列或行,然后沿直线向目的地移动。

下面是上述方法的实现:

C++
// CPP program to Find the minimum number of moves required to 
// reach the destination by the king in a chess board
#include 
using namespace std;
  
// function to Find the minimum number of moves required to 
// reach the destination by the king in a chess board
void MinSteps(int SourceX, int SourceY, int DestX, int DestY)
{
    // minimum number of steps
    cout << max(abs(SourceX - DestX), abs(SourceY - DestY)) << endl;
  
    // while the king is not in the same row or column 
    // as the destination
    while ((SourceX != DestX) || (SourceY != DestY)) {
  
        // Go up
        if (SourceX < DestX) {
            cout << 'U';
            SourceX++;
        }
  
        // Go down
        if (SourceX > DestX) {
            cout << 'D';
            SourceX--;
        }
  
        // Go left
        if (SourceY > DestY) {
            cout << 'L';
            SourceY--;
        }
  
        // Go right
        if (SourceY < DestY) {
            cout << 'R';
            SourceY++;
        }
  
        cout << endl;
    }
}
  
// Driver code
int main()
{
    int sourceX = 4, sourceY = 4;
    int destinationX = 7, destinationY = 0;
  
    MinSteps(sourceX, sourceY, destinationX, destinationY);
  
    return 0;
}


Java
// Java program to Find the minimum 
// number of moves required to reach
// the destination by the king in a 
// chess board
import java.io.*;
  
class GFG 
{
  
// function to Find the minimum number 
// of moves required to reach the
// destination by the king in a chess board
static void MinSteps(int SourceX, int SourceY,
                     int DestX, int DestY)
{
    // minimum number of steps
    System.out.println(Math.max(Math.abs(SourceX - DestX),
                     Math.abs(SourceY - DestY)));
  
    // while the king is not in the same 
    // row or column as the destination
    while ((SourceX != DestX) || 
           (SourceY != DestY)) 
    {
  
        // Go up
        if (SourceX < DestX)
        {
            System.out.print( 'U');
            SourceX++;
        }
  
        // Go down
        if (SourceX > DestX)
        {
            System.out.println( 'D');
            SourceX--;
        }
  
        // Go left
        if (SourceY > DestY) 
        {
            System.out.print( 'L');
            SourceY--;
        }
  
        // Go right
        if (SourceY < DestY) 
        {
            System.out.print( 'R');
            SourceY++;
        }
  
        System.out.println();
    }
}
  
// Driver code
public static void main (String[] args)
{
    int sourceX = 4, sourceY = 4;
    int destinationX = 7, destinationY = 0;
  
    MinSteps(sourceX, sourceY, 
             destinationX, destinationY);
}
}
  
// This code is contributed by inder_verma


Python3
# Python 3 program to Find the minimum number of moves required to 
# reach the destination by the king in a chess board
  
# function to Find the minimum number of moves required to 
# reach the destination by the king in a chess board
def MinSteps(SourceX, SourceY, DestX, DestY):
    # minimum number of steps
    print(max(abs(SourceX - DestX), abs(SourceY - DestY)))
  
    # while the king is not in the same row or column 
    # as the destination
    while ((SourceX != DestX) or (SourceY != DestY)):
        # Go up
        if (SourceX < DestX):
            print('U',end = "")
            SourceX += 1
          
        # Go down
        if (SourceX > DestX):
            print('D',end = "")
            SourceX -= 1
          
        # Go left
        if (SourceY > DestY):
            print('L')
            SourceY -= 1
          
        # Go right
        if (SourceY < DestY):
            print('R',end = "")
            SourceY += 1
          
  
# Driver code
if __name__ == '__main__':
    sourceX = 4
    sourceY = 4
    destinationX = 7
    destinationY = 0
  
    MinSteps(sourceX, sourceY, destinationX, destinationY)
  
# This code is contributed by
# Surendra_Gangwar


C#
// C# program to Find the minimum 
// number of moves required to reach
// the destination by the king in a 
// chess board
using System;
  
class GFG 
{
  
// function to Find the minimum number 
// of moves required to reach the
// destination by the king in a chess board
static void MinSteps(int SourceX, int SourceY,
                     int DestX, int DestY)
{
    // minimum number of steps
    Console.WriteLine(Math.Max(Math.Abs(SourceX - DestX),
                               Math.Abs(SourceY - DestY)));
  
    // while the king is not in the same 
    // row or column as the destination
    while ((SourceX != DestX) || 
           (SourceY != DestY)) 
    {
  
        // Go up
        if (SourceX < DestX)
        {
            Console.Write( 'U');
            SourceX++;
        }
  
        // Go down
        if (SourceX > DestX)
        {
            Console.Write( 'D');
            SourceX--;
        }
  
        // Go left
        if (SourceY > DestY) 
        {
            Console.Write( 'L');
            SourceY--;
        }
  
        // Go right
        if (SourceY < DestY) 
        {
            Console.Write( 'R');
            SourceY++;
        }
  
        Console.WriteLine();
    }
}
  
// Driver code
public static void Main ()
{
    int sourceX = 4, sourceY = 4;
    int destinationX = 7, destinationY = 0;
  
    MinSteps(sourceX, sourceY, 
             destinationX, destinationY);
}
}
  
// This code is contributed by inder_verma


PHP
 $DestX) 
        {
            echo 'D';
            $SourceX--;
        }
  
        // Go left
        if ($SourceY > $DestY) 
        {
            echo 'L';
            $SourceY--;
        }
  
        // Go right
        if ($SourceY < $DestY) 
        {
            echo 'R';
            $SourceY++;
        }
  
        echo "\n";
    }
}
  
// Driver code
$sourceX = 4; $sourceY = 4;
$destinationX = 7; $destinationY = 0;
  
MinSteps($sourceX, $sourceY, 
         $destinationX, $destinationY);
          
// This code is contributed 
// by Akanksha Rai
?>


输出:
4
UL
UL
UL
L