2577. Tempo mínimo para visitar uma célula em uma grade
dificuldade: hard
tópicos: Array, pesquisa de largura, gráfico, heap (fila de prioridade), matriz, caminho mais curto
You are given a m x n matrix grid consisting of non-negative integers where grid[row][col] represents the minimum time required to be able to visit the cell (row, col), which means you can visit the cell (row, col) only when the time you visit it is greater than or equal to grid[row][col].
você está de pé na célula Top-Left da matriz no 0 th segundo, e você deve se mover para qualquer célula adjacente nas quatro direções: para cima, para baixo, esquerda e direita. Cada movimento que você faz leva 1 segundo.
retornaro mínimo tempo necessário para o qual você pode visitar a célula inferior direita da matriz. Se você não puder visitar a célula inferior direita, retorne -1 .
Exemplo 1:
Exemplo 2:
restrições:
Dica:
Solução:
Podemos aplicar uma versão modificada do algoritmodijkstra usando uma fila de prioridade . Esse problema é essencialmente nos pede para encontrar o menor tempo necessário para visitar a célula inferior direita da célula superior esquerda, onde cada movimento tem uma restrição de tempo com base nos valores na grade.
Abordagem:representação gráfica : Trate cada célula na grade como um nó. As bordas são as células adjacentes (para cima, para baixo, esquerda, direita) para as quais você pode se mover.
fila de prioridade (min-heap) : use uma fila de prioridade para sempre explorar a célula com o menor tempo necessário. Isso garante que estamos processando as células em ordem dos primeiros tempos que podemos alcançá -las.
BFS modificado : Para cada célula, verificaremos se podemos mudar para suas células vizinhas e atualizar o horário em que podemos visitá -las. Se uma célula for visitada posteriormente que a corrente, adicionamos novamente à fila com o novo horário.
saída inicial : Quando chegarmos à célula inferior direita, podemos retornar a hora. Se esgotarmos a fila sem alcançá -la, retorne -1.
2577. Tempo mínimo para visitar uma célula em uma grade
Explicação:
fila prioritária :
O SPLPriorityQueue é usado para garantir que as células com o tempo mínimo sejam processadas primeiro. A prioridade é armazenada como -Time porque o splpriorityQueue do PHP é um max -heap por padrão.
Traversal :
A partir da célula superior esquerda (0, 0), o algoritmo processa todas as células acessíveis, considerando o tempo mais antigo que cada um pode ser visitado (max (0, grade [newrow] [newcol] - (tempo 1))).
Cells visited :
Uma matriz visitada acompanha as células que já foram processadas para evitar cálculos redundantes e loops infinitos.
limite e verificação de validade :
O algoritmo garante que permaneçamos dentro dos limites da grade e processos apenas vizinhos válidos.
cálculo do tempo :
Cada movimento leva um segundo e, se a célula exigir a espera (ou seja, grade [newrow] [newcol]> tempo 1), o algoritmo aguarda até a hora necessária.
EDGE CASE :
Se a fila estiver esgotada e a célula inferior direita não for alcançada, a função retorna -1.
Time Complexity :
o (m x n)
.$grid = [ [0, 1, 3, 2], [5, 1, 2, 5], [4, 3, 8, 6] ]; echo minimumTime($grid); // Output: 7
$grid = [ [0, 2, 4], [3, 2, 1], [1, 0, 4] ]; echo minimumTime($grid); // Output: -1
Se você achou essa série útil, considere dar o
repositóriouma estrela no github ou compartilhar a postagem em suas redes sociais favoritas?. Seu apoio significaria muito para mim! Se você quiser um conteúdo mais útil como este, fique à vontade para me seguir:
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3