关键路径的python实现代码

今数据结构实验完成关键路径的实现代码,写一篇笔记已保留思路。

首先创建两个类:

1. Node类:

属性id:每个节点的独有id,不会重复,用于确定顶点

属性data:保存节点需要储存的数据

属性early:正向计算max值

属性late:反向计算min值(如果没有理解可以参考https://blog.csdn.net/u011587070/article/details/82773820?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162417570616780357257914%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162417570616780357257914&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-82773820.first_rank_v2_pc_rank_v29&utm_term=%E5%85%B3%E9%94%AE%E8%B7%AF%E5%BE%84%E8%AE%A1%E7%AE%97&spm=1018.2226.3001.4187

2. Edge类:

属性length:边的长度

属性node1:前项节点

属性node2:后项节点

class Node():
    def __init__(self, id, data):
        self.id = id
        self.data 
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个使用Python实现关键路径计算的示例代码: ```python from collections import defaultdict class Graph: def __init__(self, vertices): self.graph = defaultdict(list) self.V = vertices def add_edge(self, u, v, w): self.graph[u].append((v, w)) def topological_sort_util(self, v, visited, stack): visited[v] = True if v in self.graph.keys(): for node, weight in self.graph[v]: if not visited[node]: self.topological_sort_util(node, visited, stack) stack.append(v) def topological_sort(self): visited = {v: False for v in self.V} stack = [] for v in self.V: if not visited[v]: self.topological_sort_util(v, visited, stack) return stack[::-1] def longest_path(self, start): topological_order = self.topological_sort() dist = {v: float('-inf') for v in self.V} dist[start] = 0 for v in topological_order: if dist[v] != float('-inf'): for node, weight in self.graph[v]: new_dist = dist[v] + weight if new_dist > dist[node]: dist[node] = new_dist return dist g = Graph(['A', 'B', 'C', 'D', 'E', 'F']) g.add_edge('A', 'B', 3) g.add_edge('A', 'C', 2) g.add_edge('B', 'D', 5) g.add_edge('C', 'D', 7) g.add_edge('C', 'E', 4) g.add_edge('D', 'F', 6) g.add_edge('E', 'F', 2) start_node = 'A' longest_paths = g.longest_path(start_node) critical_path = [] for node, weight in longest_paths.items(): for next_node, next_weight in g.graph[node]: if weight - next_weight == longest_paths[next_node]: critical_path.append((node, next_node, weight)) print("关键路径为:", critical_path) ``` 这个示例代码使用了拓扑排序和动态规划的思想,通过计算每个节点的最长路径来找到关键路径。其中,`Graph`类表示一个有向无环图,`add_edge`方法用于添加边,`topological_sort`方法用于进行拓扑排序,`longest_path`方法用于计算每个节点的最长路径。最后,通过比较每个节点的最长路径和相邻节点的边权值,找到关键路径

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值