📅  最后修改于: 2023-12-03 15:12:39.584000             🧑  作者: Mango
该问题是一道编程问题,要求实现一个程序来计算有向无环图的最长路径长度。
输入包含以下几行:
输出最长路径长度。
输入:
6
1 2 5
1 3 3
2 4 3
2 5 2
3 4 1
4 6 2
5 6 4
输出:
11
本题是一道动态规划问题,通过拓扑排序和动态规划的方式求解一个带权有向无环图(DAG)的最长路径问题。
首先对DAG拓扑排序,然后按上述排序,计算最长路径。具体地,对于某个节点,将其到达的所有节点的最长路径计算出来,然后该节点的最长路径为这些值的最大值加上该节点的权值。最后,遍历所有节点,得到最大最长路径值即为所求。
以下是Python实现该算法的代码片段:
def longest_path(n, edges):
adj_lst = [[] for _ in range(n)]
indegrees = [0] * n
for u, v, w in edges:
adj_lst[u - 1].append((v - 1, w))
indegrees[v - 1] += 1
queue = deque([i for i in range(n) if not indegrees[i]])
dist = [-1] * n
dist[queue[0]] = 0
while queue:
u = queue.popleft()
for v, w in adj_lst[u]:
indegrees[v] -= 1
if not indegrees[v]:
queue.append(v)
dist[v] = max(dist[v], dist[u] + w)
return max(dist)
其中longest_path
函数的参数为节点数n和边列表edges,返回DAG的最长路径长度。