Heim >Backend-Entwicklung >PHP-Tutorial >. Finden Sie eventuelle sichere Zustände
802. Finden Sie eventuelle sichere Zustände
Schwierigkeit:Mittel
Themen: Tiefensuche, Breitensuche, Diagramm, Topologische Sortierung
Es gibt einen gerichteten Graphen mit n Knoten, wobei jeder Knoten mit 0 bis n - 1 beschriftet ist. Der Graph wird durch einen 0-indizierten 2D-Integer-Array-Graph dargestellt, wobei graph[i] ein Integer-Array ist von Knoten neben Knoten i, was bedeutet, dass es eine Kante vom Knoten i zu jedem Knoten in Graph[i] gibt.
Ein Knoten ist ein Endknoten, wenn es keine ausgehenden Kanten gibt. Ein Knoten ist ein sicherer Knoten, wenn jeder mögliche Pfad, der von diesem Knoten ausgeht, zu einem Endknoten (oder einem anderen sicheren Knoten) führt.
Gibt ein Array zurück, das alle sicheren Knoten des Diagramms enthält. Die Antwort sollte in aufsteigender Reihenfolge sortiert werden.
Beispiel 1:
Beispiel 2:
Einschränkungen:
Lösung:
Wir müssen alle sicheren Knoten im Diagramm identifizieren. Dabei wird überprüft, ob jeder Pfad ausgehend von einem bestimmten Knoten schließlich einen Endknoten oder einen anderen sicheren Knoten erreicht. Die Lösung nutzt Depth-First Search (DFS), um Zyklen zu erkennen und Knoten als sicher oder unsicher zu klassifizieren.
Wir verwenden ein besuchtes Array mit drei Zuständen:
Lassen Sie uns diese Lösung in PHP implementieren: 802. Finden Sie mögliche sichere Zustände
<?php /** * @param Integer[][] $graph * @return Integer[] */ function eventualSafeNodes($graph) { ... ... ... /** * go to ./solution.php */ } /** * DFS helper function * * @param $node * @param $graph * @param $visited * @return int|mixed */ function dfs($node, $graph, &$visited) { ... ... ... /** * go to ./solution.php */ } // Example usage: $graph1 = [[1,2],[2,3],[5],[0],[5],[],[]]; $graph2 = [[1,2,3,4],[1,2],[3,4],[0,4],[]]; print_r(eventualSafeNodes($graph1)) . "\n"; // Output: [2,4,5,6] print_r(eventualSafeNodes($graph2)) . "\n"; // Output: [4] ?>
DFS-Funktion:
Hauptfunktion:
$graph = [[1,2],[2,3],[5],[0],[5],[],[]]; print_r(eventualSafeNodes($graph));
Ausgabe:
[2, 4, 5, 6]
$graph = [[1,2,3,4],[1,2],[3,4],[0,4],[]]; print_r(eventualSafeNodes($graph));
Ausgabe:
<?php /** * @param Integer[][] $graph * @return Integer[] */ function eventualSafeNodes($graph) { ... ... ... /** * go to ./solution.php */ } /** * DFS helper function * * @param $node * @param $graph * @param $visited * @return int|mixed */ function dfs($node, $graph, &$visited) { ... ... ... /** * go to ./solution.php */ } // Example usage: $graph1 = [[1,2],[2,3],[5],[0],[5],[],[]]; $graph2 = [[1,2,3,4],[1,2],[3,4],[0,4],[]]; print_r(eventualSafeNodes($graph1)) . "\n"; // Output: [2,4,5,6] print_r(eventualSafeNodes($graph2)) . "\n"; // Output: [4] ?>
Diese Lösung bestimmt effizient die sicheren Knoten mit DFS und stellt sicher, dass die Problembeschränkungen erfüllt sind.
Kontaktlinks
Wenn Sie diese Serie hilfreich gefunden haben, sollten Sie das repository
einen Stern auf Github geben oder den Beitrag in Ihren bevorzugten sozialen Netzwerken teilen? Ihre Unterstützung würde mir viel bedeuten!Wenn Sie mehr hilfreiche Inhalte wie diesen wünschen, können Sie mir gerne folgen:
Das obige ist der detaillierte Inhalt von. Finden Sie eventuelle sichere Zustände. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!