给定正方形的边n和给定正方形的边界上的两个点(x 1 ,y 1 )和(x 2 ,y 2 ) 。任务是找到通过这两点之间的正方形边的最短路径,其中正方形的角坐标为(0,0) , (n,0) , (0,n)和(n,n) 。
例子:
Input: n = 2, x1 = 0, y1 = 0, x2 = 1, y2 = 0
Output: 1
Input: n = 26, x1 = 21, y1 = 0, x2 = 26, y2 = 14
Output: 19
方法:
- 如果一个点的x和y坐标均大于另一个坐标,且这些点不在正方形的相对两侧,则最短距离将为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现场课程美国》。