684. Connexion redondante
Difficulté: moyen
Sujets: Recherche en profondeur, étendue première, recherche d'union, graphique
Dans ce problème, un arbre est un graphique non dirigé qui est connecté et n'a pas de cycles.
On vous donne un graphique qui a commencé comme un arbre avec n nœuds étiquetés de 1 à n, avec un bord supplémentaire ajouté. Le bord ajouté a deux verticesdifférents choisis de 1 à n, et n'était pas un bord qui existait déjà. Le graphique est représenté comme un tableau des bords de la longueur n où les bords [i] = [a i , b i ] indiquent qu'il y a un bord entre les nœuds a i et b i dans le graphique.
retournerun bord qui peut être supprimé de sorte que le graphique résultant est un arbre de n nœuds . S'il y a plusieurs réponses, retournez la réponse qui se produit en dernier dans l'entrée .
Exemple 1:
Exemple 2:
Contraintes:
Solution:
Le problèmeconnexion redondante nous demande d'identifier un bord dans un graphique qui peut être supprimé pour transformer le graphique en arborescence valide. Un arbre est un graphique non dirigé qui est connecté et acyclique. On nous a donné un graphique qui a commencé comme un arbre mais a été modifié en ajoutant un bord supplémentaire. Notre objectif est de trouver et de retourner cet avantage supplémentaire.
Points clésla recherche en profondeur d'abord (DFS) pour détecter les cycles:
Représentation de la liste d'adjacence :
Détection du cycle via DFS :
Renvoie le bord :
implémentons cette solution dans PHP: 684. Connexion redondante
<?php /** * @param Integer[][] $edges * @return Integer[] */ function findRedundantConnection($edges) { ... ... ... /** * go to ./solution.php */ } /** * Helper function to perform DFS and check connectivity * * @param $src * @param $target * @param $visited * @param $adjList * @return bool */ private function isConnected($src, $target, &$visited, &$adjList) { ... ... ... /** * go to ./solution.php */ } // Example usage: $edges1 = [[1,2],[1,3],[2,3]]; $edges2 = [[1,2],[2,3],[3,4],[1,4],[1,5]]; print_r(findRedundantConnection($edges1)) . "\n"; // Output: [2,3] print_r(findRedundantConnection($edges2)) . "\n"; // Output: [1,4] ?>
Implémentation DFS :
Addition de bord :
Edge redondant :
Entrée : EDGES = [[1, 2], [1, 3], [2, 3]]
étapes :
Sortie : [2, 3]
Entrée : bords = [[1, 2], [2, 3], [3, 4], [1, 4], [1, 5]]
étapes :
Sortie : [1, 4]
DFS Traversal :
complexité totale :
Complexité spatiale :
entrée : [[1, 2], [1, 3], [2, 3]]
sortie : [2, 3]
entrée : [[1, 2], [2, 3], [3, 4], [1, 4], [1, 5]]
sortie : [1, 4]
Le problème peut être résolu efficacement en utilisant une approche basée sur une DFS pour détecter les cycles. Cette méthode construit dynamiquement le graphique et vérifie les bords redondants à chaque étape. La solution garantit l'exactitude en adhérant aux contraintes de problème et sort le bord qui forme un cycle et se produit en dernier dans l'entrée.
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!