Maison >développement back-end >tutoriel php >. Trouver d'éventuels états sûrs
802. Trouvez des états sûrs éventuels
Difficulté: moyen
Sujets: Recherche de profondeur-première, recherche-première, graphique, tri topologique
Il existe un graphique dirigé de n nœuds avec chaque nœud étiqueté de 0 à n - 1. Le graphique est représenté par un graphique de tableau entier 0 indexé 2D où le graphique [i] est un tableau entier des nœuds adjacents au nœud I, ce qui signifie qu'il y a un bord du nœud I à chaque nœud dans le graphique [i].
Un nœud est un nœud terminal s'il n'y a pas de bords sortants. Un nœud est un nœud sécurisé si chaque chemin possible à partir de ce nœud mène à un nœud terminal (ou un autre nœud sûr).
return Un tableau contenant tous les nœuds de sécurité du graphique . La réponse doit être triée dans Ascendant Ordre.
Exemple 1:
Exemple 2:
Contraintes:
Solution:
Nous devons identifier tous les nœuds sûrs du graphique. Cela implique de vérifier si cela à partir d'un nœud donné, chaque chemin atteint finalement un nœud terminal ou un autre nœud sûr. La solution utilise la recherche en profondeur d'abord (DFS) pour détecter les cycles et classer les nœuds comme sûrs ou dangereux.
Nous utilisons un tableau visité avec trois états:
Implémentons cette solution dans PHP: 802. Trouvez des états sûrs éventuels
<?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] ?>
Fonction DFS :
fonction principale :
$graph = [[1,2],[2,3],[5],[0],[5],[],[]]; print_r(eventualSafeNodes($graph));
Sortie:
[2, 4, 5, 6]
$graph = [[1,2,3,4],[1,2],[3,4],[0,4],[]]; print_r(eventualSafeNodes($graph));
Sortie:
<?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] ?>
Cette solution détermine efficacement les nœuds sûrs à l'aide de DFS, garantissant que les contraintes de problème sont respectées.
Contact Links
Si vous avez trouvé cette série utile, veuillez envisager de donner le dépositaire une étoile sur GitHub ou de partager le message sur vos réseaux sociaux préférés ?. Votre soutien signifierait beaucoup pour moi!
Si vous voulez un 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!