Maison >développement back-end >tutoriel php >Tous les ancêtres d'un nœud dans un graphe acyclique dirigé
2192. Tous les ancêtres d'un nœud dans un graphe acyclique dirigé
Moyen
Vous recevez un entier positif n représentant le nombre de nœuds d'un Graphique acyclique dirigé (DAG). Les nœuds sont numérotés de 0 à n - 1 (inclus).
Vous recevez également un tableau d'entiers 2D Edges, où Edges[i] = [fromi, toi] indique qu'il existe un unidirectionnel bord dei à ài dans le graphique.
Renvoie une réponse de liste, où réponse[i] est la liste des ancêtres du ième nœud, triés par ordre croissant.
Un nœud u est un ancêtre d'un autre nœud v si vous pouvez atteindre v via un ensemble d'arêtes.
Exemple 1 :
Exemple 2 :
Contraintes :
Solution :
class Solution { /** * @param Integer $n * @param Integer[][] $edges * @return Integer[][] */ function getAncestors($n, $edges) { $adjacencyList = array_fill(0, $n, []); foreach ($edges as $edge) { $from = $edge[0]; $to = $edge[1]; $adjacencyList[$to][] = $from; } $ancestorsList = []; for ($i = 0; $i < $n; $i++) { $ancestors = []; $visited = []; $this->findChildren($i, $adjacencyList, $visited); for ($node = 0; $node < $n; $node++) { if ($node == $i) continue; if (in_array($node, $visited)) $ancestors[] = $node; } $ancestorsList[] = $ancestors; } return $ancestorsList; } private function findChildren($currentNode, &$adjacencyList, &$visitedNodes) { $visitedNodes[] = $currentNode; foreach ($adjacencyList[$currentNode] as $neighbour) { if (!in_array($neighbour, $visitedNodes)) { $this->findChildren($neighbour, $adjacencyList, $visitedNodes); } } } }Liens de contact
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!