2577. Tiempo mínimo para visitar una celda en una cuadrícula
dificultad: duro
temas: Array, Breadth-First Search, Graph, Heap (Priority Queue), Matrix, Shortest Rath
le dan una cuadrícula de matriz m x n que consiste en no negativo enteros donde la cuadrícula [fila] [col] representa el mínimo tiempo requerido para poder visitar la celda (fila, col), que significa que puede visitar la celda (fila) solo cuando el tiempo es mayor que es mayor que o igual a la grid [fila].
está parado en la celdatop-left de la matriz en la celda 0 th , y debe moverse a cualquier celda adyacente en las cuatro direcciones: arriba, abajo, izquierda y correcta. Cada movimiento que realice toma 1 segundo. return
elmínimo tiempo requerido en el que puede visitar la celda inferior derecha de la matriz. Si no puede visitar la celda inferior derecha, entonces regrese -1 .
Ejemplo 1:
m == grid.length
intente usar algún algoritmo que pueda encontrar las rutas más cortas en un gráfico.
podemos aplicar una versión modificada de
algorithm de dijkstrausando una cola de prioridad . Este problema esencialmente nos pide que encontremos el tiempo más corto requerido para visitar la celda inferior derecha desde la celda superior izquierda, donde cada movimiento tiene una restricción de tiempo basada en los valores en la cuadrícula. Acercarse:
: trate cada celda en la cuadrícula como un nodo. Los bordes son las celdas adyacentes (arriba, abajo, izquierda, derecha) a las que puede moverse.
: use una cola de prioridad para explorar siempre la celda con el menor tiempo requerido. Esto asegura que estemos procesando las celdas en orden de tiempo más temprano, podemos llegar a ellas.
: para cada celda, verificaremos si podemos movernos a sus celdas vecinas y actualizar el tiempo en que podemos visitarlas. Si se visita una celda en un momento posterior que la corriente, la agregamos nuevamente a la cola con la nueva hora.
: una vez que llegamos a la celda inferior derecha, podemos devolver el tiempo. Si agotamos la cola sin alcanzarlo, return -1.
Php
/**
* @param integer [] [] $ grid
* @return entero
*/
función mínima tiempo ($ grid) {
...
...
...
/**
* ir a ./solution.php
*/
}
// Ejemplo 1
$ grid1 = [
[0, 1, 3, 2],
[5, 1, 2, 5],
[4, 3, 8, 6]
];
Echo mínimo tiempo ($ grid1). Php_eol; // Salida: 7
// Ejemplo 2
$ grid2 = [
[0, 2, 4],
[3, 2, 1],
[1, 0, 4]
];
Echo mínimo tiempo ($ grid2). Php_eol; // Salida: -1
?>
:
Splpriorityqueue se usa para garantizar que las células con el tiempo mínimo se procesen primero. La prioridad se almacena como -Time porque SplpriorityQueue de PHP es un máximo de Weap de forma predeterminada.
:
A partir de la celda superior izquierda (0, 0), el algoritmo procesa todas las celdas accesibles, considerando el tiempo más temprano se puede visitar (max (0, cuadrícula [newRow] [newcol] - (tiempo 1))).
:
Una matriz visitada realiza un seguimiento de las celdas que ya se han procesado para evitar cálculos redundantes y bucles infinitos.
:
El algoritmo asegura que nos mantengamos dentro de los límites de la cuadrícula y procese solo vecinos válidos.
:
Cada movimiento toma un segundo, y si la celda requiere esperar (es decir, cuadrícula [newRow] [newcol]> tiempo 1), el algoritmo espera hasta la hora requerida.
:
Si la cola se agota y no se alcanza la celda inferior derecha, la función devuelve -1.
:
cada celda se agrega a la cola de prioridad a máximo una vez:o (m x n) .
$grid = [ [0, 1, 3, 2], [5, 1, 2, 5], [4, 3, 8, 6] ]; echo minimumTime($grid); // Output: 7
$grid = [ [0, 1, 3, 2], [5, 1, 2, 5], [4, 3, 8, 6] ]; echo minimumTime($grid); // Output: 7Si encontró esta serie útil, considere dar el repositorio
una estrella en GitHub o compartir la publicación en sus redes sociales favoritas. ¡Tu apoyo significaría mucho para mí!
Si desea un contenido más útil como este, no dude en seguirme:
github
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3