2192。有向无环图中某个节点的所有祖先
中
给定一个正整数 n,表示有向无环图 (DAG) 的节点数。节点编号从 0 到 n - 1(包含)。
还给你一个 2D 整数数组 Edges,其中 Edges[i] = [fromi, toi] 表示存在一个 单向图中从 fromi 到 toi 的边。
返回列表答案,其中answer[i]是第i第节点的祖先列表,按升序排序。
如果 u 可以通过一组边到达 v,则节点 u 是另一个节点 v 的祖先。
示例1:
示例2:
约束:
解决方案:
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); } } } }
联系链接
以上是有向无环图中节点的所有祖先的详细内容。更多信息请关注PHP中文网其他相关文章!