Find single Movement in a Matrix - GeeksforGeeks

24 May, 2021
Given four integers x1, y1 and x2, y2 which represent two locations in an infinite 2D-Matrix, the task is to find whether it is possible to move from (x1, y1) to (x2, y2) in a single move, either left, right, up or down. Note that the move will be repeated until the destination is reached. If it is impossible to reach (x2, y2) output -1.Examples:  
Input: x1 = 0, y1 = 0, x2 = 1, y2 = 0 Output: Down Destination is just below the starting point.Input: x1 = 0, y1 = 0, x2 = 1, y2 = 1 Output: -1 It is impossible to reach (1, 1) from (0, 0) in a single move.  
 
Approach: Check if the coordinates are either in the same row or in the same column then only its possible to reach the final destination. Then print the move according to the direction of the destination.Below is the implementation of the above approach:  
C++
Java
Python3
C#
PHP
Javascript
#include <bits/stdc++.h>using namespace std; // Function that checks whether it is// possible to move from// (x1, y1) to (x2, y2)void Robot_Grid(int x1, int y1, int x2, int y2){    // Both locations are    // in the same row    if (x1 == x2) {         // Destination is        // at the right        if (y1 < y2) {            cout << "Right";        }        // Destination is        // at the left        else {            cout << "Left";        }    }     // Both locations are    // in the same column    else if (y1 == y2) {         // Destination is below        // the current row        if (x1 < x2) {            cout << "Down";        }         // Destination is above        // the current row        else {            cout << "Up";        }    }     // Impossible to get    // to the destination    else {        cout << "-1";    }} // Driver codeint main(){    int x1, x2, y1, y2;    x1 = 0;    y1 = 0;    x2 = 0;    y2 = 1;     Robot_Grid(x1, y1, x2, y2);    return 0;}
// Java implementation of the given above approach public class GFG{     // Function that checks whether it is    // possible to move from    // (x1, y1) to (x2, y2)    static void Robot_Grid(int x1, int y1, int x2, int y2)    {        // Both locations are        // in the same row        if (x1 == x2) {                 // Destination is            // at the right            if (y1 < y2) {                System.out.print("Right");            }            // Destination is            // at the left            else {                System.out.print("Left");            }        }             // Both locations are        // in the same column        else if (y1 == y2) {                 // Destination is below            // the current row            if (x1 < x2) {                System.out.print("Down");            }                 // Destination is above            // the current row            else {                System.out.println("Up");            }        }             // Impossible to get        // to the destination        else {            System.out.print("-1");        }    }         // Driver code     public static void main(String []args)    {        int x1, x2, y1, y2;        x1 = 0;        y1 = 0;        x2 = 0;        y2 = 1;             Robot_Grid(x1, y1, x2, y2);} // This code is contributed by Ryuga}
# Function that checks whether it is# possible to move from# (x1, y1) to (x2, y2) def Robot_Grid(x1, y1, x2, y2):         # Both locations are in the same row    if (x1 == x2):                 # Destination is at the right        if (y1 < y2):            print("Right")         # Destination is at the left        else:            print("Left")             # Both locations are in the same column    elif (y1 == y2):                 # Destination is below the current row        if (x1 < x2):            print("Down")         # Destination is above the current row        else:            print("Up")     # Impossible to get to the destination    else:        print("-1") # Driver codeif __name__ == '__main__':    x1 = 0    y1 = 0    x2 = 0    y2 = 1     Robot_Grid(x1, y1, x2, y2) # This code is contributed by# Sanjit_Prasad
// C# implementation of the given above approachusing System; class GFG{     // Function that checks whether it is    // possible to move from    // (x1, y1) to (x2, y2)    static void Robot_Grid(int x1, int y1,                           int x2, int y2)    {        // Both locations are        // in the same row        if (x1 == x2)        {                 // Destination is            // at the right            if (y1 < y2)            {                Console.Write("Right");            }            // Destination is            // at the left            else            {                Console.Write("Left");            }        }             // Both locations are        // in the same column        else if (y1 == y2)        {                 // Destination is below            // the current row            if (x1 < x2)            {                Console.Write("Down");            }                 // Destination is above            // the current row            else            {                Console.WriteLine("Up");            }        }             // Impossible to get        // to the destination        else        {            Console.WriteLine("-1");        }    }         // Driver code    public static void Main()    {        int x1, x2, y1, y2;        x1 = 0;        y1 = 0;        x2 = 0;        y2 = 1;             Robot_Grid(x1, y1, x2, y2);    }} // This code is contributed by// Mukul Singh
<?php// PHP implementation of the above approach // Function that checks whether it is// possible to move from// (x1, y1) to (x2, y2)function Robot_Grid($x1, $y1, $x2, $y2){    // Both locations are in the same row    if ($x1 == $x2)    {         // Destination is at the right        if ($y1 < $y2)        {            echo "Right";        }                 // Destination is at the left        else        {            echo "Left";        }    }     // Both locations are in the same column    else if ($y1 == $y2)    {         // Destination is below the        // current row        if ($x1 < $x2)        {            echo "Down";        }         // Destination is above the current row        else        {            echo "Up";        }    }     // Impossible to get to the destination    else    {        echo "-1";    }} // Driver code$x1 = 0;$y1 = 0;$x2 = 0;$y2 = 1; Robot_Grid($x1, $y1, $x2, $y2); // This code is contributed by ita_c?>
<script> // Javascript implementation of the given above approach         // Function that checks whether it is    // possible to move from    // (x1, y1) to (x2, y2)    function Robot_Grid(x1,y1,x2,y2)    {        // Both locations are        // in the same row        if (x1 == x2) {                   // Destination is            // at the right            if (y1 < y2) {                document.write("Right");            }            // Destination is            // at the left            else {                document.write("Left");            }        }               // Both locations are        // in the same column        else if (y1 == y2) {                   // Destination is below            // the current row            if (x1 < x2) {                document.write("Down");            }                   // Destination is above            // the current row            else {                document.write("Up");            }        }               // Impossible to get        // to the destination        else {            document.write("-1");        }    }         // Driver code    let x1, x2, y1, y2;        x1 = 0;        y1 = 0;        x2 = 0;        y2 = 1;               Robot_Grid(x1, y1, x2, y2); // This code is contributed by rag2127</script>
Right
 
ankthon
Sanjit_Prasad
Code_Mech
ukasp
rag2127
Matrix
School Programming
Matrix
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Efficiently compute sums of diagonals of a matrix
Flood fill Algorithm - how to implement fill() in paint?
Check for possible path in 2D matrix
Zigzag (or diagonal) traversal of Matrix
Mathematics | L U Decomposition of a System of Linear Equations
Python Dictionary
Arrays in C/C++
Inheritance in C++
Reverse a string in Java
C++ Classes and Objects