📜  广场上的最短路径

📅  最后修改于: 2021-06-26 19:36:25             🧑  作者: Mango

给定正方形的边n和给定正方形的边界上的两个点(x 1 ,y 1 )(x 2 ,y 2 ) 。任务是找到通过这两点之间的正方形边的最短路径,其中正方形的角坐标为(0,0)(n,0)(0,n)(n,n)

例子:

方法:

  • 如果一个点的xy坐标均大于另一个坐标,且这些点不在正方形的相对两侧,则最短距离将为abs(x2 – x1)+ abs(y2 – y1)
  • 否则,最短距离将等于min((x1 + y1 + x2 + y2),(4 * n)–(x1 + y1 + x2 + y2))

下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
using namespace std;
 
// Function to return the length
// of the minimum path between
// two points on a square of given side
int minPath(int n, int x1, int y1, int x2, int y2)
{
 
    // If both of the x and y coordinates
    // of one point is greater than the other
    if ((x1 <= x2 && y1 <= y2) || (x1 >= x2 && y1 >= y2))
    {
        // If the points are not on opposite sides
        if (!(abs(y2 - y1) == n || abs(x2 - x1) == n))
            return (abs(x1 - x2) + abs(y1 - y2));
    }
    return min(x1 + x2 + y1 + y2, (4 * n) - (x1 + x2 + y1 + y2));
}
 
// Driver code
int main()
{
    // Side of the square
    int n = 4;
    int x1 = 2, y1 = 0, x2 = 3, y2 = 4;
    cout << minPath(n, x1, y1, x2, y2);
 
    return 0;
}
 
// improved by Sonal Agrawal


Java
// Java implementation of the approach
class GFG{
 
// Function to return the length
// of the minimum path between
// two points on a square of given side
static int minPath(int n, int x1, int y1,
                          int x2, int y2)
{
     
    // If both of the x and y coordinates
    // of one point is greater than the other
    if ((x1 <= x2 && y1 <= y2) ||
        (x1 >= x2 && y1 >= y2))
    {
         
        // If the points are not on opposite sides
        if (!(Math.abs(y2 - y1) == n ||
              Math.abs(x2 - x1) == n))
            return (Math.abs(x1 - x2) +
                    Math.abs(y1 - y2));
    }
    return Math.min(x1 + x2 + y1 + y2, (4 * n) -
                   (x1 + x2 + y1 + y2));
}
 
// Driver code
public static void main(String[] args)
{
     
    // Side of the square
    int n = 4;
    int x1 = 2, y1 = 0, x2 = 3, y2 = 4;
     
    System.out.println(minPath(n, x1, y1, x2, y2));
}
}
 
// This code is contributed by sanjeev2552


Python3
# Python3 implementation of above approach
 
# Function to return the length of the
# minimum path between two points
# on a square of given side
def minPath(n, x1, y1, x2, y2):
 
    # If both of the x and y coordinates
    # of one point is greater than the other
    if (((x1 <= x2 and y1 <= y2) or
        (x1 >= x2 and y1 >= y2)) and
        not (abs(y2 - y1) == n or
             abs(x2 - x1) == n)):
        return (abs(x1 - x2) + abs(y1 - y2));
 
    return min(x1 + x2 + y1 + y2, (4 * n) -
              (x1 + x2 + y1 + y2));
 
# Driver code
 
# side of the square
n = 4; x1 = 2; y1 = 0
x2 = 3; y2 = 4
print(minPath(n, x1, y1, x2, y2))
 
# This code is contributed
# by Shashank_Sharma


C#
// C# implementation of the approach
using System;
 
class GFG
{
     
// Function to return the length
// of the minimum path between
// two points on a square of given side
static int minPath(int n, int x1, int y1,
                        int x2, int y2)
{
 
    // If both of the x and y coordinates
    // of one point is greater than the other
    if ((x1 <= x2 && y1 <= y2) || (x1 >= x2 && y1 >= y2))
    {
        // If the points are not on opposite sides
        if (!(Math.Abs(y2 - y1) == n || Math.Abs(x2 - x1) == n))
            return (Math.Abs(x1 - x2) + Math.Abs(y1 - y2));
    }
    return Math.Min(x1 + x2 + y1 + y2, (4 * n) - (x1 + x2 + y1 + y2));
}
 
// Driver code
public static void Main()
{
    // Side of the square
    int n = 4;
    int x1 = 2, y1 = 0, x2 = 3, y2 = 4;
    Console.Write(minPath(n, x1, y1, x2, y2));
}
}
 
// This code is contributed
// by Akanksha Rai


PHP
= $x2 && $y1 >= $y2))
    {
        // If the points are not on opposite sides
        if (!(abs($y2 - $y1) == $n || abs($x2 - $x1) == $n))
            return (abs($x1 - $x2) + abs($y1 - $y2));
    }
    return min($x1 + $x2 + $y1 + $y2, (4 * $n) - ($x1 + $x2 + $y1 + $y2));
     
}
 
// Driver code
 
// Side of the square
$n = 4;
$x1 = 2 ;
$y1 = 0 ;
$x2 = 3 ;
$y2 = 4 ;
echo minPath($n, $x1, $y1, $x2, $y2);
     
// This code is contributed by Ryuga
?>


输出
7

如果您希望与行业专家一起参加现场课程,请参阅《 Geeks现场课程》和《 Geeks现场课程美国》。