Número de días hasta que todos los chocolates se vuelven insalubres

Pablo tiene una caja de chocolate cuadrada de tamaño nxn en la que hay una variedad de chocolates saludables indicados inicialmente con una ‘H’, pero descubre que algunos de los chocolates están podridos y no son saludables indicados con una ‘U’. En un día, los chocolates podridos hacen que todos los chocolates vecinos sean insalubres. Esto sigue y sigue hasta que todos los chocolates presentes en la caja de chocolate se vuelven no saludables para comer. Averigüe el número de días en los que toda la caja de bombones se vuelve Insalubre. 

( Nota: se garantiza que al menos uno de los chocolates no es saludable)

Ejemplos:  

Input :  n = 3
         H H H
         H U H
         H H H
Output : 1
Only 1 day is required to turn all the
chocolates unhealthy in the chocolate box.

Input :  n = 4
         H H H U
         H H H H
         H U H H
         H H H H
Output : 2
Explanation:
In first day chocolate at (0, 0), (0, 1),
(2, 3), (3, 3) will remain healthy and in
the second day all the chocolates will
become unhealthy.

Preguntado en Amazon, Accolite, Arcesium.

Enfoque de fuerza bruta: 

Inicialice una bandera = 1. Use un ciclo while, dentro de ese mientras busca una H (la búsqueda requiere una complejidad de tiempo O (n ^ 2) si no podemos encontrar una H en la array de caracteres 2-D, deje de incrementar el contador de días y establezca la bandera como 0 para romper el ciclo.

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

C++

// CPP program to find number of days before
// all chocolates become unhealthy.
#include <bits/stdc++.h>
using namespace std;
 
// Validates out of bounds indexing
bool isValid(int i, int j, int n)
{
    if (i < 0 || j < 0 || i >= n || j >= n)
        return false;
    return true;
}
 
// function for returning number of days
int numdays(char arr[][4], int n)
{
    int numdays = 0;
 
    while (true)
    {
        // Traverse matrix to look for unhealthy
        // chocolates and mark their neighbors.
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                if (arr[i][j] == 'U')
                {
 
                    if (isValid(i - 1, j - 1, n) &&
                        arr[i - 1][j - 1] == 'H')
                        arr[i - 1][j - 1] = 'V';
 
                    if (isValid(i - 1, j, n) &&
                        arr[i - 1][j] == 'H')
                        arr[i - 1][j] = 'V';
 
                    if (isValid(i - 1, j + 1, n) &&
                        arr[i - 1][j + 1] == 'H')
                        arr[i - 1][j + 1] = 'V';
 
                    if (isValid(i, j - 1, n) &&
                        arr[i][j - 1] == 'H')
                        arr[i][j - 1] = 'V';
 
                    if (isValid(i, j + 1, n) &&
                        arr[i][j + 1] == 'H')
                        arr[i][j + 1] = 'V';
 
                    if (isValid(i + 1, j - 1, n) &&
                        arr[i + 1][j - 1] == 'H')
                        arr[i + 1][j - 1] = 'V';
 
                    if (isValid(i + 1, j, n) &&
                            arr[i + 1][j] == 'H')
                        arr[i + 1][j] = 'V';
 
                    if (isValid(i + 1, j + 1, n) &&
                        arr[i + 1][j + 1] == 'H')
                        arr[i + 1][j + 1] = 'V';
                }
 
                /*Here we are assigning the neighbours of U
                with the character V because we don't want
                these neighbours to be counted in that
                particular day. If we do not do so, in the
                next iteration that neighbour will also get
                counted which was supposed to be counted in
                the next day. */
            }
        }
 
        // Mark chocolates unhealthy which are made
        // unhealthy in current day.
        bool Hflag = false;
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                if (arr[i][j] == 'V')
                {
                    arr[i][j] = 'U';
                    Hflag = true;
                }
            }
        }
 
        // Check if there was any chocoloate
        // marked unhealthy in current day
        if (Hflag)
            numdays++;
        else
            break;
    }
    return numdays;
}
 
// Driver function
int main()
{
    int n = 4;
    char arr[4][4] = { 'H', 'H', 'H', 'U',
                       'H', 'H', 'H', 'H',
                       'H', 'U', 'H', 'H',
                       'H', 'H', 'H', 'H'
                     };
    int ans = numdays(arr, n);
    cout << "number of days taken : "
         << ans << "\n";
    return 0;
}

C

// C program to find number of days before
// all chocolates become unhealthy.
#include <stdio.h>
 
// Validates out of bounds indexing
int isValid(int i, int j, int n)
{
    if (i < 0 || j < 0 || i >= n || j >= n)
        return 0;
    return 1;
}
 
// function for returning number of days
int numdays(char arr[][4], int n)
{
    int numdays = 0;
 
    while (1)
    {
        // Traverse matrix to look for unhealthy
        // chocolates and mark their neighbors.
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                if (arr[i][j] == 'U')
                {
 
                    if (isValid(i - 1, j - 1, n) &&
                        arr[i - 1][j - 1] == 'H')
                        arr[i - 1][j - 1] = 'V';
 
                    if (isValid(i - 1, j, n) &&
                        arr[i - 1][j] == 'H')
                        arr[i - 1][j] = 'V';
 
                    if (isValid(i - 1, j + 1, n) &&
                        arr[i - 1][j + 1] == 'H')
                        arr[i - 1][j + 1] = 'V';
 
                    if (isValid(i, j - 1, n) &&
                        arr[i][j - 1] == 'H')
                        arr[i][j - 1] = 'V';
 
                    if (isValid(i, j + 1, n) &&
                        arr[i][j + 1] == 'H')
                        arr[i][j + 1] = 'V';
 
                    if (isValid(i + 1, j - 1, n) &&
                        arr[i + 1][j - 1] == 'H')
                        arr[i + 1][j - 1] = 'V';
 
                    if (isValid(i + 1, j, n) &&
                            arr[i + 1][j] == 'H')
                        arr[i + 1][j] = 'V';
 
                    if (isValid(i + 1, j + 1, n) &&
                        arr[i + 1][j + 1] == 'H')
                        arr[i + 1][j + 1] = 'V';
                }
 
                /*Here we are assigning the neighbours of U
                with the character V because we don't want
                these neighbours to be counted in that
                particular day. If we do not do so, in the
                next iteration that neighbour will also get
                counted which was supposed to be counted in
                the next day. */
            }
        }
 
        // Mark chocolates unhealthy which are made
        // unhealthy in current day.
        int Hflag = 0;
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                if (arr[i][j] == 'V')
                {
                    arr[i][j] = 'U';
                    Hflag = 1;
                }
            }
        }
 
        // Check if there was any chocoloate
        // marked unhealthy in current day
        if (Hflag)
            numdays++;
        else
            break;
    }
    return numdays;
}
 
// Driver Code
int main()
{
    int n = 4;
    char arr[4][4] = { 'H', 'H', 'H', 'U',
                       'H', 'H', 'H', 'H',
                       'H', 'U', 'H', 'H',
                       'H', 'H', 'H', 'H' };
    int ans = numdays(arr, n);
    printf("number of days taken : %d\n", ans);
    return 0;
}
 
// This code is contributed by ankush_953

Java

// Java program to find number of days before
// all chocolates become unhealthy.
class GFG
{
     
    // Validates out of bounds indexing
    static boolean isValid(int i, int j, int n)
    {
        if (i < 0 || j < 0 || i >= n || j >= n)
            return false;
        return true;
    }
 
    // function for returning number of days
    static int numdays(char [][]arr, int n)
    {
        int numdays = 0;
 
        while (true)
        {
            // Traverse matrix to look for unhealthy
            // chocolates and mark their neighbors.
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    if (arr[i][j] == 'U')
                    {
 
                        if (isValid(i - 1, j - 1, n) &&
                            arr[i - 1][j - 1] == 'H')
                            arr[i - 1][j - 1] = 'V';
 
                        if (isValid(i - 1, j, n) &&
                            arr[i - 1][j] == 'H')
                            arr[i - 1][j] = 'V';
 
                        if (isValid(i - 1, j + 1, n) &&
                            arr[i - 1][j + 1] == 'H')
                            arr[i - 1][j + 1] = 'V';
 
                        if (isValid(i, j - 1, n) &&
                            arr[i][j - 1] == 'H')
                            arr[i][j - 1] = 'V';
 
                        if (isValid(i, j + 1, n) &&
                            arr[i][j + 1] == 'H')
                            arr[i][j + 1] = 'V';
 
                        if (isValid(i + 1, j - 1, n) &&
                            arr[i + 1][j - 1] == 'H')
                            arr[i + 1][j - 1] = 'V';
 
                        if (isValid(i + 1, j, n) &&
                                arr[i + 1][j] == 'H')
                            arr[i + 1][j] = 'V';
 
                        if (isValid(i + 1, j + 1, n) &&
                            arr[i + 1][j + 1] == 'H')
                            arr[i + 1][j + 1] = 'V';
                    }
 
                    /*Here we are assigning the neighbours of U
                    with the character V because we don't want
                    these neighbours to be counted in that
                    particular day. If we do not do so, in the
                    next iteration that neighbour will also get
                    counted which was supposed to be counted in
                    the next day. */
                }
            }
 
            // Mark chocolates unhealthy which are made
            // unhealthy in current day.
            boolean Hflag = false;
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    if (arr[i][j] == 'V')
                    {
                        arr[i][j] = 'U';
                        Hflag = true;
                    }
                }
            }
 
            // Check if there was any chocoloate
            // marked unhealthy in current day
            if (Hflag)
                numdays++;
            else
                break;
        }
        return numdays;
    }
     
    // Driver Code
    public static void main(String []args)
    {
        int n = 4;
        char [][]arr = {{'H', 'H', 'H', 'U'},
                        {'H', 'H', 'H', 'H'},
                        {'H', 'U', 'H', 'H'},
                        {'H', 'H', 'H', 'H'}};
        int ans = numdays(arr, n);
        System.out.println("number of days taken : " + ans);
    }
 
}
 
// This code is contributed by ankush_953

Python3

# Python3 program to find number of days before
# all chocolates become unhealthy.
 
# Validates out of bounds indexing
def isValid(i, j, n):
    if (i < 0 or j < 0 or i >= n or j >= n):
        return False
    return True
 
# function for returning number of days
def numdays(arr, n):
    numdays = 0
    while (True):
         
        # Traverse matrix to look for unhealthy
        # chocolates and mark their neighbors.
        for i in range(n):
            for j in range(n):
                if (arr[i][j] == 'U'):
                    if (isValid(i - 1, j - 1, n) and\
                        arr[i - 1][j - 1] == 'H'):
                        arr[i - 1][j - 1] = 'V'
                         
                    if (isValid(i - 1, j, n) and\
                        arr[i - 1][j] == 'H'):
                        arr[i - 1][j] = 'V'
 
                    if (isValid(i - 1, j + 1, n) and\
                        arr[i - 1][j + 1] == 'H'):
                        arr[i - 1][j + 1] = 'V'
 
                    if (isValid(i, j - 1, n) and\
                        arr[i][j - 1] == 'H'):
                        arr[i][j - 1] = 'V'
 
                    if (isValid(i, j + 1, n) and\
                        arr[i][j + 1] == 'H'):
                        arr[i][j + 1] = 'V'
 
                    if (isValid(i + 1, j - 1, n) and\
                        arr[i + 1][j - 1] == 'H'):
                        arr[i + 1][j - 1] = 'V'
 
                    if (isValid(i + 1, j, n) and\
                        arr[i + 1][j] == 'H'):
                        arr[i + 1][j] = 'V'
 
                    if (isValid(i + 1, j + 1, n) and\
                        arr[i + 1][j + 1] == 'H'):
                        arr[i + 1][j + 1] = 'V'
 
                # Here we are assigning the neighbours of U
                # with the character V because we don't want
                # these neighbours to be counted in that
                # particular day. If we do not do so, in the
                # next iteration that neighbour will also get
                # counted which was supposed to be counted in
                # the next day.
         
        # Mark chocolates unhealthy which are made
        # unhealthy in current day.
        Hflag = False
        for i in range(n):
            for j in range(n):
                if (arr[i][j] == 'V'):
                    arr[i][j] = 'U'
                    Hflag = True
 
        # Check if there was any chocoloate
        # marked unhealthy in current day
        if (Hflag):
            numdays += 1
        else:
            break
         
    return numdays
 
# Driver Code
n = 4
arr = [['H', 'H', 'H', 'U'],
       ['H', 'H', 'H', 'H'],
       ['H', 'U', 'H', 'H'],
       ['H', 'H', 'H', 'H']]
ans = numdays(arr, n)
print("number of days taken :", ans)
 
# This code is contributed by ankush_953

C#

// C# program to find number of days before
// all chocolates become unhealthy.
using System;
 
class GFG{
 
    // Validates out of bounds indexing
    static bool isValid(int i, int j, int n)
    {
        if (i < 0 || j < 0 || i >= n || j >= n)
            return false;
        return true;
    }
     
    // function for returning number of days
    static int numdays(char[][] arr, int n)
    {
        int numdays = 0;
     
        while (true)
        {
            // Traverse matrix to look for unhealthy
            // chocolates and mark their neighbors.
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    if (arr[i][j] == 'U')
                    {
     
                        if (isValid(i - 1, j - 1, n) &&
                            arr[i - 1][j - 1] == 'H')
                            arr[i - 1][j - 1] = 'V';
     
                        if (isValid(i - 1, j, n) &&
                            arr[i - 1][j] == 'H')
                            arr[i - 1][j] = 'V';
     
                        if (isValid(i - 1, j + 1, n) &&
                            arr[i - 1][j + 1] == 'H')
                            arr[i - 1][j + 1] = 'V';
     
                        if (isValid(i, j - 1, n) &&
                            arr[i][j - 1] == 'H')
                            arr[i][j - 1] = 'V';
     
                        if (isValid(i, j + 1, n) &&
                            arr[i][j + 1] == 'H')
                            arr[i][j + 1] = 'V';
     
                        if (isValid(i + 1, j - 1, n) &&
                            arr[i + 1][j - 1] == 'H')
                            arr[i + 1][j - 1] = 'V';
     
                        if (isValid(i + 1, j, n) &&
                                arr[i + 1][j] == 'H')
                            arr[i + 1][j] = 'V';
     
                        if (isValid(i + 1, j + 1, n) &&
                            arr[i + 1][j + 1] == 'H')
                            arr[i + 1][j + 1] = 'V';
                    }
     
                    /*Here we are assigning the neighbours of U
                    with the character V because we don't want
                    these neighbours to be counted in that
                    particular day. If we do not do so, in the
                    next iteration that neighbour will also get
                    counted which was supposed to be counted in
                    the next day. */
                }
            }
     
            // Mark chocolates unhealthy which are made
            // unhealthy in current day.
            bool Hflag = false;
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    if (arr[i][j] == 'V')
                    {
                        arr[i][j] = 'U';
                        Hflag = true;
                    }
                }
            }
     
            // Check if there was any chocoloate
            // marked unhealthy in current day
            if (Hflag)
                numdays++;
            else
                break;
        }
        return numdays;
    }
     
    // Driver function
    static public void Main ()
    {
        int n = 4;
        char[][] arr = new char[][]{"HHHU".ToCharArray(),
                        "HHHH".ToCharArray(),
                        "HUHH".ToCharArray(),
                        "HHHH".ToCharArray()};
        int ans = numdays(arr, n);
        Console.WriteLine("number of days taken : "+ ans);
    }
}
 
// This code is contributed by shubhamsingh10

Javascript

<script>
 
// Python3 program to find number of days before
// all chocolates become unhealthy.
 
// Validates out of bounds indexing
function isValid(i, j, n){
    if (i < 0 || j < 0 || i >= n || j >= n)
        return false
    return true
}
 
// function for returning number of days
function numdays(arr, n){
    let numdays = 0
    while (true)
    {
         
        // Traverse matrix to look for unhealthy
        // chocolates and mark their neighbors.
        for(let i = 0; i < n; i++)
        {
            for(let j = 0; j < n; j++)
            {
                if (arr[i][j] == 'U')
                {
                    if (isValid(i - 1, j - 1, n) && arr[i - 1][j - 1] == 'H')
                        arr[i - 1][j - 1] = 'V'
                         
                    if (isValid(i - 1, j, n) && arr[i - 1][j] == 'H')
                        arr[i - 1][j] = 'V'
 
                    if (isValid(i - 1, j + 1, n) && arr[i - 1][j + 1] == 'H')
                        arr[i - 1][j + 1] = 'V'
 
                    if (isValid(i, j - 1, n) && arr[i][j - 1] == 'H')
                        arr[i][j - 1] = 'V'
 
                    if (isValid(i, j + 1, n) && arr[i][j + 1] == 'H')
                        arr[i][j + 1] = 'V'
 
                    if (isValid(i + 1, j - 1, n) && arr[i + 1][j - 1] == 'H')
                        arr[i + 1][j - 1] = 'V'
 
                    if (isValid(i + 1, j, n) && arr[i + 1][j] == 'H')
                        arr[i + 1][j] = 'V'
 
                    if (isValid(i + 1, j + 1, n) && arr[i + 1][j + 1] == 'H')
                        arr[i + 1][j + 1] = 'V'
                }
                 
                // Here we are assigning the neighbours of U
                // with the character V because we don't want
                // these neighbours to be counted in that
                // particular day. If we do not do so, in the
                // next iteration that neighbour will also get
                // counted which was supposed to be counted in
                // the next day.
            }
        }
         
        // Mark chocolates unhealthy which are made
        // unhealthy in current day.
        let Hflag = false
        for(let i=0;i<n;i++){
            for(let j=0;j<n;j++){
                if (arr[i][j] == 'V'){
                    arr[i][j] = 'U'
                    Hflag = true
                }
            }
        }
 
        // Check if there was any chocoloate
        // marked unhealthy in current day
        if(Hflag)
            numdays++
        else
            break
    }
         
    return numdays
}
 
// Driver Code
let n = 4
let arr = [['H', 'H', 'H', 'U'],
    ['H', 'H', 'H', 'H'],
    ['H', 'U', 'H', 'H'],
    ['H', 'H', 'H', 'H']]
let ans = numdays(arr, n)
document.write("number of days taken : ", ans)
 
// This code is contributed by shinjanpatra
 
</script>
Producción

number of days taken : 2

Enfoque eficiente (utiliza BFS):

En este enfoque, declare una cola que ingrese pares que correspondan al índice de los chocolates no saludables y luego, tan pronto como se alcance el índice (-1, -1), incrementamos el contador numdays. Esta solución se basa básicamente en el cálculo de niveles en el recorrido de orden de nivel (versión iterativa) de un árbol binario en el que empujamos los índices iniciales de los chocolates no saludables en lugar del Node raíz e incrementamos numdays en lugar del contador de nivel tan pronto como el índice (-1 , -1) se alcanza en lugar de NULL. Tan pronto como el contador de la bandera llega a 2, rompemos el bucle que indica que la cola ha encontrado dos pares consecutivos (-1, -1).

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

C++

// CPP program using Efficient approach
// to find number of days
#include <bits/stdc++.h>
using namespace std;
 
// Validates out of bounds indexing
bool isValid(int i, int j, int n)
{
    if (i < 0 || j < 0 || i >= n || j >= n)
        return false;
    return true;
}
 
// function for returning number of days
int numdays(char arr[][4], int n)
{
    int numdays = 0;
    int i, j;
    queue<pair<int, int> > q;
 
    // Initializing queue with initial
    // positions of unhealthy chocolates
    for (i = 0; i < n; i++)
        for (j = 0; j < n; j++) {
            if (arr[i][j] == 'U')
                q.push(make_pair(i, j));
        }
 
    q.push(make_pair(-1, -1));
 
    // (-1, -1) is used as a checkpoint
    // to count the number of days
    pair<int, int> temp;
 
    // temporary pair to store the indexes
    int flag = 0;
    while (!q.empty()) {
        temp = q.front();
        i = temp.first;
        j = temp.second;
        q.pop();
        if (i == -1 && j == -1) {
            flag++;
            q.push(make_pair(-1, -1));
 
            // pushing the respective
           // checkpoint
            if (flag == 2)
                break;
            numdays++;
        }
        else {
            flag = 0;
            if (isValid(i - 1, j - 1, n) &&
                arr[i - 1][j - 1] == 'H') {
                q.push(make_pair(i - 1, j - 1));
                arr[i - 1][j - 1] = 'U';
            }
 
            if (isValid(i - 1, j, n) &&
                arr[i - 1][j] == 'H') {
                q.push(make_pair(i - 1, j));
                arr[i - 1][j] = 'U';
            }
 
            if (isValid(i - 1, j + 1, n) &&
                arr[i - 1][j + 1] == 'H') {
                q.push(make_pair(i - 1, j + 1));
                arr[i - 1][j + 1] = 'U';
            }
 
            if (isValid(i, j - 1, n) &&
                arr[i][j - 1] == 'H') {
                q.push(make_pair(i, j - 1));
                arr[i][j - 1] = 'U';
            }
 
            if (isValid(i, j + 1, n) &&
                arr[i][j + 1] == 'H') {
                q.push(make_pair(i, j + 1));
                arr[i][j + 1] = 'U';
            }
 
            if (isValid(i + 1, j - 1, n) &&
                arr[i + 1][j - 1] == 'H') {
                q.push(make_pair(i + 1, j - 1));
                arr[i + 1][j - 1] = 'U';
            }
 
            if (isValid(i + 1, j, n) &&
                arr[i + 1][j] == 'H') {
                q.push(make_pair(i + 1, j));
                arr[i + 1][j] = 'U';
            }
 
            if (isValid(i + 1, j + 1, n) &&
                arr[i + 1][j + 1] == 'H') {
                q.push(make_pair(i + 1, j + 1));
                arr[i + 1][j + 1] = 'U';
            }
        }
    }
 
    return numdays - 1;
}
 
// Driver function
int main()
{
    int n = 4;
    char arr[4][4] = { 'H', 'H', 'H', 'U',
                       'H', 'H', 'H', 'H',
                       'H', 'H', 'U', 'H',
                       'H', 'H', 'H', 'H' };
    int ans = numdays(arr, n);
    cout << "number of days taken : "
         << ans << "\n";
    return 0;
}

Python3

# Python3 program using Efficient approach
# to find number of days
 
# Validates out of bounds indexing
def isValid(i, j, n):
    if (i < 0 or j < 0 or i >= n or j >= n):
        return False
    return True
 
# function for returning number of days
def numdays(arr, n):
     
    numdays = 0
    i = 0
    j = 0
    q = []
     
    # Initializing queue with initial
    # positions of unhealthy chocolates
    for i in range(n):
        for j in range(n):
            if (arr[i][j] == 'U'):
                q.append([i, j])
     
    q.append([-1, -1])
     
    # (-1, -1) is used as a checkpo
    # to count the number of days
    temp = []
     
    # temporary pair to store the indexes
    flag = 0
    while (len(q)):
        temp = q[0]
        i = temp[0]
        j = temp[1]
        q.pop(0)
        if (i == -1 and j == -1):
            flag += 1
            q.append([-1, -1])
             
            # appending the respective
            # checkpo
            if (flag == 2):
                break
            numdays += 1
        else:
             
            flag = 0
            if (isValid(i - 1, j - 1, n) and arr[i - 1][j - 1] == 'H'):
                q.append([i - 1, j - 1])
                arr[i - 1][j - 1] = 'U'
             
            if (isValid(i - 1, j, n) and arr[i - 1][j] == 'H'):
                q.append([i - 1, j])
                arr[i - 1][j] = 'U'
             
            if (isValid(i - 1, j + 1, n) and arr[i - 1][j + 1] == 'H'):
                q.append([i - 1, j + 1])
                arr[i - 1][j + 1] = 'U'
             
            if (isValid(i, j - 1, n) and arr[i][j - 1] == 'H'):
                q.append([i, j - 1])
                arr[i][j - 1] = 'U'
             
            if (isValid(i, j + 1, n) and arr[i][j + 1] == 'H'):
                q.append([i, j + 1])
                arr[i][j + 1] = 'U'
                 
            if (isValid(i + 1, j - 1, n) and arr[i + 1][j - 1] == 'H'):
                q.append([i + 1, j - 1])
                arr[i + 1][j - 1] = 'U'
                 
            if (isValid(i + 1, j, n) and arr[i + 1][j] == 'H'):
                q.append([i + 1, j])
                arr[i + 1][j] = 'U'
             
            if (isValid(i + 1, j + 1, n) and arr[i + 1][j + 1] == 'H'):
                q.append([i + 1, j + 1])
                arr[i + 1][j + 1] = 'U'
                 
    return numdays - 1
 
 
# Driver function
n = 4
arr = [['H', 'H', 'H', 'U'],['H', 'H', 'H', 'H'],
        ['H', 'H', 'U', 'H'],['H', 'H', 'H', 'H']]
ans = numdays(arr, n)
print("number of days taken :",ans)
 
# This code is contributed by shubhamsingh10

Javascript

<script>
 
// JavaScript program using Efficient approach
// to find number of days
 
// Validates out of bounds indexing
function isValid(i, j, n){
    if (i < 0 || j < 0 || i >= n || j >= n)
        return false
 
    return true
}
 
// function for returning number of days
function numdays(arr, n){
     
    let numdays = 0
    let i = 0
    let j = 0
    let q = []
     
    // Initializing queue with initial
    // positions of unhealthy chocolates
    for(let i=0;i<n;i++){
        for(let j=0;j<n;j++){
            if (arr[i][j] == 'U'){
                q.push([i, j])
            }
        }
    }
     
    q.push([-1, -1])
     
    // (-1, -1) is used as a checkpo
    // to count the number of days
    let temp = []
     
    // temporary pair to store the indexes
    let flag = 0
    while (q.length){
        let temp = q.shift()
        let i = temp[0]
        let j = temp[1]
 
        if (i == -1 && j == -1){
            flag += 1
            q.push([-1, -1])
             
            // pushing the respective
            // checkpo
            if (flag == 2)
                break
            numdays += 1
        }
        else{
             
            flag = 0
            if (isValid(i - 1, j - 1, n) && arr[i - 1][j - 1] == 'H'){
                q.push([i - 1, j - 1])
                arr[i - 1][j - 1] = 'U'
            }
             
            if (isValid(i - 1, j, n) && arr[i - 1][j] == 'H'){
                q.push([i - 1, j])
                arr[i - 1][j] = 'U'
            }
             
            if (isValid(i - 1, j + 1, n) && arr[i - 1][j + 1] == 'H'){
                q.push([i - 1, j + 1])
                arr[i - 1][j + 1] = 'U'
            }
             
            if (isValid(i, j - 1, n) && arr[i][j - 1] == 'H'){
                q.push([i, j - 1])
                arr[i][j - 1] = 'U'
            }
             
            if (isValid(i, j + 1, n) && arr[i][j + 1] == 'H'){
                q.push([i, j + 1])
                arr[i][j + 1] = 'U'
            }
                 
            if (isValid(i + 1, j - 1, n) && arr[i + 1][j - 1] == 'H'){
                q.push([i + 1, j - 1])
                arr[i + 1][j - 1] = 'U'
            }
                 
            if (isValid(i + 1, j, n) && arr[i + 1][j] == 'H'){
                q.push([i + 1, j])
                arr[i + 1][j] = 'U'
            }
             
            if (isValid(i + 1, j + 1, n) && arr[i + 1][j + 1] == 'H'){
                q.push([i + 1, j + 1])
                arr[i + 1][j + 1] = 'U'
            }
        }
    }
                 
    return numdays - 1
}
 
 
// Driver function
let n = 4
let arr = [['H', 'H', 'H', 'U'],['H', 'H', 'H', 'H'],
        ['H', 'H', 'U', 'H'],['H', 'H', 'H', 'H']]
let ans = numdays(arr, n)
document.write("number of days taken :",ans,"</br>")
 
// This code is contributed by shinjanpatra
 
</script>
Producción

number of days taken : 2

Publicación traducida automáticamente

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