首页 > 文章列表 > 2192. 有向无环图中节点的所有祖先

2192. 有向无环图中节点的所有祖先

415 2024-07-24

2192。有向无环图中某个节点的所有祖先

给你一个正整数n,表示有向无环图(DAG)的节点数。节点编号从 0 到 n - 1()。

还给你一个 2D 整数数组边,其中edges[i] = [fromi, toi] 表示图中存在一条从 fromi 到 toi单向边.

返回列表答案,其中answer[i]是第i节点的祖先列表,按升序排序。

如果 u 可以通过一组边到达 v,则节点 u 是另一个节点 v 的祖先

示例1:

2192. 有向无环图中节点的所有祖先

  • 输入: n = 8,edgeList = [[0,3],[0,4],[1,3],[2,4],[2,7],[3,5],[3, 6],[3,7],[4,6]]
  • 输出: [[],[],[],[0,1],[0,2],[0,1,3],[0,1,2,3,4],[0,1 ,2,3]]
  • 说明: 上图表示输入图。
    • 节点 0、1 和 2 没有任何祖先。
    • 节点 3 有两个祖先 0 和 1。
    • 节点 4 有两个祖先 0 和 2。
    • 节点 5 有三个祖先 0、1 和 3。
    • 节点 6 有 5 个祖先:0、1、2、3 和 4。
    • 节点 7 有四个祖先 0、1、2 和 3。

示例2:

2192. 有向无环图中节点的所有祖先

  • 输入: n = 5,edgeList = [[0,1],[0,2],[0,3],[0,4],[1,2],[1,3],[1, 4],[2,3],[2,4],[3,4]]
  • 输出: [[],[0],[0,1],[0,1,2],[0,1,2,3]]
  • 说明: 上图表示输入图。
    • 节点 0 没有任何祖先。
    • 节点 1 有一个祖先 0.
    • 节点 2 有两个祖先 0 和 1。
    • 节点 3 有三个祖先 0、1 和 2。
    • 节点 4 有四个祖先 0、1、2 和 3。

限制:

  • 1 <= n <= 1000
  • 0 <= Edges.length <= min(2000, n * (n - 1) / 2)
  • edges[i].length == 2
  • 0 <= 从i,到i <= n - 1
  • i!=到i
  • 没有重复的边。
  • 该图是有向无环

解决方案:

类解决方案{

    /*** @param 整数 $n
     * @param 整数[][] $edges
     * @返回整数[][]*/
    函数 getAncestors($n, $edges) {
        $adjacencyList = array_fill(0, $n, []);
        foreach ($edges 作为 $edge) {
            $来自=$边缘[0];
            $to = $edge[1];
            $adjacencyList[$to][] = $from;
        }

        $ancestorsList = [];

        为 ($i = 0; $i < $n; $i++) {
            $祖先= [];
            $访问过= [];
            $this->findChildren($i, $adjacencyList, $visited);
            for ($node = 0; $node < $n; $node++) {
                if ($node == $i) 继续;
                if (in_array($node, $visited))
                    $祖先[] = $节点;
            }
            $ancestorsList[] = $ancestors;
        }

        返回$ancestorsList;
    }

    私有函数 findChildren($currentNode, &$adjacencyList, &$visitedNodes) {
        $visitedNodes[] = $currentNode;
        foreach ($adjacencyList[$currentNode] as $neighbour) {
            if (!in_array($neighbour, $visitedNodes)) {
                $this->findChildren($neighbour, $adjacencyList, $visitedNodes);
            }
        }
    }
}

联系链接

  • 领英
  • GitHub
来源:https://dev.to/mdarifulhaque/2192-all-ancestors-of-a-node-in-a-directed-acyclic-graph-3h26

本类最新

查看更多