3243. Kürzeste Entfernung nach Straßenzusatzabfragen I
Schwierigkeit:Mittel
Themen: Array, Breitensuche, Diagramm
Sie erhalten eine Ganzzahl n und eine 2D-Ganzzahl-Array-Abfrage.
Es gibt n Städte, die von 0 bis n - 1 nummeriert sind. Zunächst gibt es eine unidirektionale Straße von Stadt i zu Stadt i 1 für alle 0 <= i < n - 1.
queries[i] = [ui, vi] stellt die Hinzufügung einer neuen unidirektionalen Straße von der Stadt ui<🎜 dar > zur Stadt vi. Nach jeder Abfrage müssen Sie die Länge des kürzesten Weges von Stadt 0 zu Stadt n - 1 ermitteln.
Gib
eine Array-Antwort zurück, wobei für jedes i im Bereich [0, query.length - 1] Antwort[i] die Länge des kürzesten Pfads von Stadt 0 zu Stadt n - 1 nach der Verarbeitung von < ist 🎜>zuersti 1 Abfragen.
Beispiel 1:
Eingabe:- n = 5, Abfragen = [[2,4],[0,2],[0,4]]
Ausgabe:- [3,2,1]
Erklärung:-
Nach Addition der Straße von 2 bis 4 beträgt die Länge des kürzesten Weges von 0 bis 4 3.
Nach Addition der Straße von 0 bis 2 beträgt die Länge des kürzesten Weges von 0 bis 4 2.
Nach Addition der Straße von 0 bis 4 beträgt die Länge des kürzesten Weges von 0 bis 4 1.
Beispiel 2:
Eingabe:- n = 4, Abfragen = [[0,3],[0,2]]
Ausgabe:- [1,1]
Erklärung:-
Nach Addition der Straße von 0 bis 3 beträgt die Länge des kürzesten Weges von 0 bis 3 1.
Nach der Addition der Straße von 0 auf 2 bleibt die Länge des kürzesten Weges 1.
Einschränkungen:
3 <= n <= 500
- 1 <= query.length <= 500
- queries[i].length == 2
- 0 <= query[i][0] < query[i][1] < n
- 1 < Abfragen[i][1] – Abfragen[i][0]
- Es gibt keine wiederholten Straßen unter den Abfragen.
-
Hinweis:
- Behalten Sie das Diagramm bei und verwenden Sie nach jeder Aktualisierung einen effizienten Algorithmus für den kürzesten Pfad.
- Wir verwenden BFS/Dijkstra für jede Abfrage.
Lösung:
Wir müssen das Hinzufügen von Straßen zwischen Städten simulieren und nach jeder hinzugefügten Straße den kürzesten Weg von Stadt 0 zu Stadt n - 1 berechnen. Angesichts der Einschränkungen und der Art des Problems können wir Breadth-First Search (BFS) für ungewichtete Diagramme verwenden.
Ansatz:
-
Grafikdarstellung:
- Wir können die Städte und Straßen mithilfe einer Adjazenzliste darstellen. Zunächst hat jede Stadt i eine Straße zur Stadt i 1 für alle 0 <= i < n - 1.
- Nach jeder Abfrage fügen wir die Straße von u_i nach v_i in das Diagramm ein.
-
Berechnung des kürzesten Pfades (BFS):
- Wir können BFS verwenden, um den kürzesten Weg von Stadt 0 zu Stadt n - 1 zu berechnen. BFS funktioniert hier gut, da alle Straßen das gleiche Gewicht haben (jede Straße hat eine Länge von 1).
-
Iterieren über Abfragen:
- Für jede Abfrage fügen wir die neue Straße zum Diagramm hinzu und verwenden dann BFS, um den kürzesten Weg von Stadt 0 zu Stadt n - 1 zu finden. Nach der Verarbeitung jeder Abfrage speichern wir das Ergebnis im Ausgabearray.
-
Effizienz:
- Da wir BFS nach jeder Abfrage verwenden und die Diagrammgröße höchstens 500 Städte mit bis zu 500 Abfragen betragen kann, beträgt die Zeitkomplexität für jedes BFS O(n·m), wobei n die Anzahl der Städte und m ist die Anzahl der Straßen. Wir müssen BFS bis zu 500 Mal durchführen, damit die Lösung innerhalb der Problembeschränkungen effizient läuft.
Lassen Sie uns diese Lösung in PHP implementieren: 3243. Kürzeste Entfernung nach Straßenzusatzabfragen I
Erläuterung:
-
Diagramminitialisierung:
- Ein Adjazenzlistendiagramm wird zur Darstellung der Städte und Straßen verwendet.
- Anfangs gab es Straßen nur zwischen aufeinanderfolgenden Städten (i bis i 1).
-
BFS-Funktion:
- BFS wird verwendet, um die kürzeste Entfernung von Stadt 0 zu Stadt n - 1 zu berechnen. Wir unterhalten eine Warteschlange für BFS und ein Array-Abstände, um die Mindestanzahl von Straßen (Kanten) zu speichern, um jede Stadt zu erreichen.
- Anfangs ist die Entfernung zur Stadt 0 auf 0 gesetzt, und alle anderen Städte haben eine Entfernung von unendlich (PHP_INT_MAX).
- Während wir jede Stadt in der BFS-Warteschlange verarbeiten, aktualisieren wir die Entfernungen für ihre Nachbarstädte und fahren fort, bis alle erreichbaren Städte besucht sind.
-
Abfrageverarbeitung:
- Bei jeder Abfrage wird die neue Straße zum Diagramm hinzugefügt (u -> v).
- BFS wird aufgerufen, um nach der Aktualisierung den kürzesten Weg von Stadt 0 zu Stadt n-1 zu berechnen.
- Das Ergebnis von BFS wird im Ergebnisarray gespeichert.
-
Ausgabe:
- Das Ergebnisarray enthält die kürzesten Pfadlängen nach jeder Abfrage.
-
Zeitkomplexität:
- Jedes BFS benötigt O(n·m), wobei n die Anzahl der Städte und m die Anzahl der Straßen ist. Da die Anzahl der Abfragen q beträgt, beträgt die Gesamtzeitkomplexität O(q * (n m)), was für die gegebenen Einschränkungen effizient sein sollte.
Beispielhafte Vorgehensweise:
Für die Eingabe n = 5 und Abfragen = [[2, 4], [0, 2], [0, 4]]:
- Zunächst sind die Straßen [0 -> 1 -> 2 -> 3 -> 4].
- Nach der ersten Abfrage [2, 4] sind die Straßen [0 -> 1 -> 2 -> 3 -> 4] und der kürzeste Weg von 0 nach 4 ist 3 (unter Verwendung des Pfades 0 -> 1 -> 2 -> 4).
- Nach der zweiten Abfrage [0, 2] sind die Straßen [0 -> 2, 1 -> 2 -> 3 -> 4] und der kürzeste Weg von 0 nach 4 ist 2 (unter Verwendung des Pfads 0 -> 2 -> 4).
- Nach der dritten Abfrage [0, 4] sind die Straßen [0 -> 2, 1 -> 2 -> 3 -> 4], und der kürzeste Weg von 0 nach 4 ist 1 (direkte Straße 0 -> 4).
Die Ausgabe ist also [3, 2, 1].
Abschließende Gedanken:
- Die Lösung verwendet BFS für jede Abfrage, um den kürzesten Pfad effizient zu berechnen.
- Das Diagramm wird dynamisch aktualisiert, wenn bei jeder Abfrage neue Straßen hinzugefügt werden.
- Die Lösung funktioniert gut innerhalb der Problembeschränkungen und verarbeitet effizient bis zu 500 Anfragen mit bis zu 500 Städten.
Kontaktlinks
Wenn Sie diese Serie hilfreich fanden, denken Sie bitte darüber nach, dem Repository einen Stern auf GitHub zu geben oder den Beitrag in Ihren bevorzugten sozialen Netzwerken zu teilen? Ihre Unterstützung würde mir sehr viel bedeuten!
Wenn Sie weitere hilfreiche Inhalte wie diesen wünschen, folgen Sie mir gerne:
Das obige ist der detaillierte Inhalt vonKürzeste Entfernung nach Straßenzusatzabfragen I. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!