Shortest path on a Square

Given side of a square n and two points (x1, y1) and (x2, y2) on the boundaries of the given square. The task is to find the shortest path through the square sides between these two points where the corner coordinates of the square are are (0, 0), (n, 0), (0, n) and (n, n) .

Examples:

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

Approach:

  • If both the x and y coordinates of a point is greater than the other then the shortest distance will be abs(x2 – x1) + abs(y2 – y1).
  • Else, the shortest distance will be equal to min((x1 + y1 + x2 + y2), (4 * n) – (x1 + y1 + x2 + y2))

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the approach
#include <bits/stdc++.h>
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))
        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 = 2;
    int x1 = 0, y1 = 0, x2 = 1, y2 = 0;
    cout << minPath(n, x1, y1, x2, y2);
  
    return 0;
}

chevron_right


Python 3

# 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)):
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 = 2; x1 = 0; y1 = 0
x2 = 1; y2 = 0
print(minPath(n, x1, y1, x2, y2))

# This code is contributed
# by Shashank_Sharma

PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// Php implementation of the approach 
  
// Function to return the length 
// of the minimum path between 
// two points on a square of given side 
function 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 && $y1 <= $y2) || 
        ($x1 >= $x2 && $y1 >= $y2)) 
        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 = 2; 
    $x1 = 0 ;
    $y1 = 0 ;
    $x2 = 1 ;
    $y2 = 0 ; 
    echo minPath($n, $x1, $y1, $x2, $y2); 
      
// This code is contributed by Ryuga
?>

chevron_right


Output:

1


My Personal Notes arrow_drop_up