Python 中查找 DAG 中最长路径(无重复节点)的程序


假设我们有一个由邻接表表示的有向无环图。我们需要找到图中最长的路径,且路径中没有重复的节点。

因此,如果输入类似于

则输出将是 4,因为路径为 0 -> 1 -> 3 -> 4 -> 2,长度为 4。

为了解决这个问题,我们将遵循以下步骤:

  • ans := 0
  • n := 图的节点数
  • table := 一个大小为 n 的列表,并填充 -1
  • 定义一个函数 dfs()。它将接收 u
  • 如果 table[u] 不为 -1,则
    • 返回 table[u]
  • p_len := 0
  • 对于图[u] 中的每个顶点 v,执行以下操作:
    • p_len := p_len 和 (1 + dfs(v)) 中的最大值
  • table[u] := p_len
  • 返回 p_len
  • 在主方法中执行以下操作:
  • 对于范围从 0 到 n 的 i,执行以下操作:
    • ans := ans 和 dfs(i) 中的最大值
  • 返回 ans

示例(Python)

让我们看看以下实现,以便更好地理解:

 实时演示

class Solution:
   def solve(self, graph):
      ans = 0
      n = len(graph)
      table = [-1] * n
      def dfs(u):
         if table[u] != -1:
            return table[u]
         p_len = 0
         for v in graph[u]:
            p_len = max(p_len, 1 + dfs(v))
         table[u] = p_len
         return p_len
      for i in range(n):
         ans = max(ans, dfs(i))
      return ans
ob = Solution()
graph = [
   [1, 2],
   [3, 4],
   [],
   [4],
   [2],
]
print(ob.solve(graph))

输入

graph = [[1, 2],[3, 4],[],[4],[2]]

输出

4

更新于:2020-12-12

895 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.