# Shortest path on a Square

Given side of a square **n** and two points **(x _{1}, y_{1})** and

**(x**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

_{2}, y_{2})**(0, 0)**,

**(n, 0)**,

**(0, n)**, and

**(n, n)**.

**Examples:**

Input:n = 2, x1 = 0, y1 = 0, x2 = 1, y2 = 0Output:1

Input:n = 26, x1 = 21, y1 = 0, x2 = 26, y2 = 14Output:19

**Approach:**

- If both the
**x**and**y**coordinates of a point is greater than the other and the points are not on opposite sides of square 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++

`// 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))` ` ` `{` ` ` `// 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

`<?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` `))` ` ` `{` ` ` `// 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` `?>` |

## Javascript

`<script>` ` ` `// Javascript 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))` ` ` `{` ` ` ` ` `// 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));` ` ` `}` ` ` ` ` `// Side of the square` ` ` `let n = 4;` ` ` `let x1 = 2, y1 = 0, x2 = 3, y2 = 4;` ` ` `document.write(minPath(n, x1, y1, x2, y2));` ` ` ` ` `// This code is contributed by decode2207.` `</script>` |

**Output**

7