Dirección final después de visitar cada celda de Matrix a partir de (0, 0)

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: 
 

  1. Si n > mym es par, la dirección final será hacia arriba.
  2. Si n > m y m es impar, la dirección final será Abajo.
  3. Si n <= m y n es par, la dirección final será Izquierda.
  4. 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)
 

Publicación traducida automáticamente

Artículo escrito por spp____ y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *