Dada una cuadrícula 2D de tamaño N x M. La tarea es encontrar la dirección final después de visitar cada celda bajo condiciones dadas.
- Puede comenzar solo desde la esquina superior izquierda de la cuadrícula N * M y mirando hacia la derecha.
- Puede caminar un cuadrado a la vez en la dirección en la que mira.
- Si llega al límite de la cuadrícula o si la siguiente casilla que está a punto de visitar ya ha sido visitada, gire a la derecha.
Ejemplos:
Entrada: N = 3, M = 3
Salida: Derecha
Explicación: A continuación se muestra la posición final después de atravesar la cuadrícula
Entrada: N = 3, M = 1
Salida: Abajo
Enfoque: Para el enunciado del problema anterior tenemos que observar lo siguiente:
- El camino formado será siempre un camino en Espiral. Entonces, podemos decir que cualquiera de las celdas intermedias será la celda final y necesitamos encontrar la dirección de esa celda.
- Si n > m , entonces la dirección final solo podría ser Arriba o Abajo dependiendo del valor de m porque siempre queda alguna celda en la última columna descubierta cuando todas las demás columnas están cubiertas.
- Si n <= m , entonces la dirección final solo podría ser Izquierda o Derecha dependiendo del valor de n.
Por lo tanto, sobre la base de las observaciones anteriores, solo puede haber 4 casos para 4 direcciones:
- Si n > mym es par, la dirección final será hacia arriba.
- Si n > m y m es impar, la dirección final será Abajo.
- Si n <= m y n es par, la dirección final será Izquierda.
- Si n <= m y n es impar, la dirección final será Derecha.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program to find the direction // when stopped moving #include <bits/stdc++.h> using namespace std; // Function to find the direction // when stopped moving void findDirection(int n, int m) { if (n > m) { if (m % 2 == 0) printf("Up\n"); else printf("Down\n"); } else { if (n % 2 == 0) printf("Left\n"); else printf("Right\n"); } } // Driver Code int main() { // Given size of NxM grid int n = 3, m = 3; // Function Call findDirection(n, m); return 0; }
Java
// Java program to find the direction // when stopped moving class GFG{ // Function to find the direction // when stopped moving static void findDirection(int n, int m) { if (n > m) { if (m % 2 == 0) System.out.print("Up\n"); else System.out.print("Down\n"); } else { if (n % 2 == 0) System.out.print("Left\n"); else System.out.print("Right\n"); } } // Driver code public static void main(String[] args) { // Given size of NxM grid int n = 3, m = 3; // Function Call findDirection(n, m); } } // This code is contributed by shubham
Python3
# Python3 program to find the direction # when stopped moving # Function to find the direction # when stopped moving def findDirection(n, m): if (n > m): if (m % 2 == 0): print("Up\n"); else: print("Down\n"); else: if (n % 2 == 0): print("Left\n"); else: print("Right\n"); # Driver Code # Given size of NxM grid n = 3; m = 3; # Function Call findDirection(n, m); # This code is contributed by Code_Mech
C#
// C# program to find the direction // when stopped moving using System; class GFG{ // Function to find the direction // when stopped moving static void findDirection(int n, int m) { if (n > m) { if (m % 2 == 0) Console.Write("Up\n"); else Console.Write("Down\n"); } else { if (n % 2 == 0) Console.Write("Left\n"); else Console.Write("Right\n"); } } // Driver code public static void Main() { // Given size of NxM grid int n = 3, m = 3; // Function Call findDirection(n, m); } } // This code is contributed by Code_Mech
Javascript
<script> // Javascript program to find the direction // when stopped moving // Function to find the direction // when stopped moving function findDirection(n, m) { if (n > m) { if (m % 2 == 0) document.write("Up<br>"); else document.write("Down<br>"); } else { if (n % 2 == 0) document.write("Left<br>"); else document.write("Right<br>"); } } // Driver Code // Given size of NxM grid let n = 3, m = 3; // Function Call findDirection(n, m); // This code is contributed by rishavmahato348. </script>
Producción:
Right
Tiempo Complejidad: O(1)
Espacio Auxiliar: O(1)