Pasos mínimos para obtener 1 en el centro de una array binaria

Dada una array N * N donde N es impar con todos los valores 0 excepto por una sola celda que tiene el valor 1. La tarea es encontrar los mínimos movimientos posibles para llevar este 1 al centro de la array cuando en un solo movimiento, se pueden intercambiar dos filas consecutivas o dos columnas consecutivas.
Ejemplos: 
 

Entrada: mat[][] = { 
{0, 0, 1, 0, 0}, 
{0, 0, 0, 0, 0}, 
{0, 0, 0, 0, 0}, 
{0, 0, 0, 0, 0}, 
{0, 0, 0, 0, 0}} 
Salida:
Operación 1: Intercambiar la primera y la segunda fila. 
Operación 2: Intercambiar la segunda y la tercera fila.
Entrada: mat[][] = { 
{0, 0, 0}, 
{0, 1, 0}, 
{0, 0, 0}} 
Salida:
 

Acercarse: 
 

  • Calcula la posición del centro de la array como (cI, cJ) = (⌊N / 2⌋, ⌊N / 2⌋) .
  • Encuentre la posición del 1 en la array y guárdela en (oneI, oneJ) .
  • Ahora, los movimientos mínimos posibles serán abs(cI – oneI) + abs(cJ – oneJ) .

A continuación se muestra la implementación del enfoque anterior: 
 

C++

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
const int N = 5;
 
// Function to return the
// minimum moves required
int minMoves(int mat[N][N])
{
 
    // Center of the matrix
    int cI = N / 2, cJ = N / 2;
 
    // Find the position of the 1
    int oneI = 0, oneJ = 0;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            if (mat[i][j] == 1) {
                oneI = i;
                oneJ = j;
                break;
            }
        }
    }
 
    return (abs(cI - oneI) + abs(cJ - oneJ));
}
 
// Driver code
int main()
{
    int mat[N][N] = { { 0, 0, 0, 0, 0 },
                      { 0, 0, 0, 0, 0 },
                      { 0, 0, 0, 0, 0 },
                      { 0, 0, 0, 0, 0 },
                      { 0, 0, 1, 0, 0 } };
 
    cout << minMoves(mat);
 
    return 0;
}

Java

// Java implementation of the approach
class GFG
{
 
static int N = 5;
 
// Function to return the
// minimum moves required
static int minMoves(int mat[][])
{
 
    // Center of the matrix
    int cI = N / 2, cJ = N / 2;
 
    // Find the position of the 1
    int oneI = 0, oneJ = 0;
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            if (mat[i][j] == 1)
            {
                oneI = i;
                oneJ = j;
                break;
            }
        }
    }
 
    return (Math.abs(cI - oneI) + Math.abs(cJ - oneJ));
}
 
// Driver code
public static void main(String[] args)
{
    int mat[][] = { { 0, 0, 0, 0, 0 },
                    { 0, 0, 0, 0, 0 },
                    { 0, 0, 0, 0, 0 },
                    { 0, 0, 0, 0, 0 },
                    { 0, 0, 1, 0, 0 } };
 
    System.out.print(minMoves(mat));
}
}
 
// This code is contributed by PrinciRaj1992

Python3

# Python3 implementation of the approach
N = 5
 
# Function to return the
# minimum moves required
def minMoves(mat):
 
    # Center of the matrix
    cI = N // 2
    cJ = N // 2
 
    # Find the position of the 1
    oneI = 0
    oneJ = 0
    for i in range(N):
        for j in range(N):
            if (mat[i][j] == 1):
                oneI = i
                oneJ = j
                break
 
    return (abs(cI - oneI) + abs(cJ - oneJ))
 
# Driver code
mat = [[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 1, 0, 0]]
 
print(minMoves(mat))
 
# This code is contributed by Mohit Kumar

C#

// C# implementation of the approach
using System;
 
class GFG
{
static int N = 5;
 
// Function to return the
// minimum moves required
static int minMoves(int [,]mat)
{
 
    // Center of the matrix
    int cI = N / 2, cJ = N / 2;
 
    // Find the position of the 1
    int oneI = 0, oneJ = 0;
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            if (mat[i, j] == 1)
            {
                oneI = i;
                oneJ = j;
                break;
            }
        }
    }
    return (Math.Abs(cI - oneI) +
            Math.Abs(cJ - oneJ));
}
 
// Driver code
public static void Main(String[] args)
{
    int [,]mat = {{ 0, 0, 0, 0, 0 },
                  { 0, 0, 0, 0, 0 },
                  { 0, 0, 0, 0, 0 },
                  { 0, 0, 0, 0, 0 },
                  { 0, 0, 1, 0, 0 }};
 
    Console.Write(minMoves(mat));
}
}
 
// This code is contributed by 29AjayKumar

Javascript

<script>
 
// JavaScript implementation of the approach
 
const N = 5;
 
// Function to return the
// minimum moves required
function minMoves(mat)
{
 
    // Center of the matrix
    let cI = parseInt(N / 2), cJ = parseInt(N / 2);
 
    // Find the position of the 1
    let oneI = 0, oneJ = 0;
    for (let i = 0; i < N; i++) {
        for (let j = 0; j < N; j++) {
            if (mat[i][j] == 1) {
                oneI = i;
                oneJ = j;
                break;
            }
        }
    }
 
    return (Math.abs(cI - oneI) + Math.abs(cJ - oneJ));
}
 
// Driver code
    let mat = [ [ 0, 0, 0, 0, 0 ],
                      [ 0, 0, 0, 0, 0 ],
                      [ 0, 0, 0, 0, 0 ],
                      [ 0, 0, 0, 0, 0 ],
                      [ 0, 0, 1, 0, 0 ] ];
 
    document.write(minMoves(mat));
 
</script>
Producción: 

2

 

Publicación traducida automáticamente

Artículo escrito por SURENDRA_GANGWAR 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 *