给定四个整数sourceX , sourceY , destinationX和destinationY ,它们表示棋盘上的源坐标和目标坐标。任务是找到国王从源头到目的地所需的最少移动次数。
国王可以移动到与国王当前所在的正方形具有共同边或共同顶点的正方形(通常可以移动到8个不同的正方形)。
使用L,R,U,D,LU,LD,RU和RD的打印路径,其中L,R,U和D分别代表左,右,上和下。
例子:
Input: sourceX = 4, sourceY = 4, destinationX = 3, destinationY = 5
Output: 1
DR
Input: sourceX = 4, sourceY = 4, destinationX = 7, destinationY = 0
Output: 4
UL
UL
UL
L
方法:沿对角线方向向目的地移动,直到国王到达与目的地相同的列或行,然后沿直线向目的地移动。
下面是上述方法的实现:
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