2290. Suppression minimale des obstacles pour atteindre le coin
Difficulté : Difficile
Sujets : Tableau, recherche en largeur d'abord, graphique, tas (file d'attente prioritaire), matrice, chemin le plus court
Vous recevez une grille de tableau d'entiers 2D indexée à 0 de taille m x n. Chaque cellule a l'une des deux valeurs suivantes :
Vous pouvez vous déplacer vers le haut, le bas, la gauche ou la droite depuis et vers une cellule vide.
Renvoyer le nombre minimum d'obstacles à supprimer pour pouvoir passer du coin supérieur gauche (0, 0) au coin inférieur droit coin (m - 1, n - 1).
Exemple 1 :
Exemple 2 :
Contraintes :
Indice :
Solution :
Nous devons modéliser ce problème en utilisant un graphique où chaque cellule de la grille est un nœud. Le but est de naviguer du coin supérieur gauche (0, 0) vers le coin inférieur droit (m-1, n-1), tout en minimisant le nombre d'obstacles (1s) que nous devons supprimer.
Représentation graphique :
Choix de l'algorithme :
0-1 BFS :
Implémentons cette solution en PHP : 2290. Suppression minimale des obstacles pour atteindre le coin
Explication:
Analyse des entrées :
- La grille est prise comme un tableau 2D.
- Les lignes et les colonnes sont calculées pour la vérification des limites.
Mise en œuvre de Deque :
- SplDoublyLinkedList est utilisé pour simuler le deque. Il prend en charge l'ajout d'éléments à l'avant (unshift) ou à l'arrière (push).
Tableau visité :
- Garde une trace des cellules déjà visitées pour éviter un traitement redondant.
0-1 Logique BFS :
- Commencez à partir de (0, 0) avec un coût de 0.
- Pour chaque cellule voisine :
- S'il est vide (grid[nx][ny] == 0), ajoutez-le au début du deque avec le même coût.
- Si c'est un obstacle (grid[nx][ny] == 1), ajoutez-le au dos du deque avec un coût incrémenté.
Renvoyer le résultat :
- Lorsque le coin inférieur droit est atteint, renvoyez le coût.
- Si aucun chemin valide n'existe (bien que le problème en garantisse un), renvoie -1.
Complexité:
Cette implémentation fonctionne efficacement dans les limites données.
Liens de contact
Si vous avez trouvé cette série utile, pensez à donner une étoile au référentiel sur GitHub ou à partager la publication sur vos réseaux sociaux préférés ?. Votre soutien signifierait beaucoup pour moi !
Si vous souhaitez du contenu plus utile comme celui-ci, n'hésitez pas à me suivre :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!