NetworkX系列教程(10)-算法之四:拓扑排序与最大流问题

摘要:
“a”]11.5最大流量问题#构建图G=nx。DiGraph()G.add _ edge('x','a',容量=3.0)G.add=edge,
小书匠Graph图论

重头戏部分来了,写到这里我感觉得仔细认真点了,可能在NetworkX中,实现某些算法就一句话的事,但是这个算法是做什么的,用在什么地方,原理是怎么样的,不清除,所以,我决定先把图论中常用算法弄个明白在写这部分.

图论常用算法看我的博客:

下面我将使用NetworkX实现上面的算法,建议不清楚的部分打开两篇博客对照理解.
我将图论的经典问题及常用算法的总结写在下面两篇博客中:
图论---问题篇
图论---算法篇

目录:
* 11.4拓扑排序算法(TSA)
* 11.5最大流问题


注意:如果代码出现找不库,请返回第一个教程,把库文件导入.

11.4拓扑排序算法(TSA)

  1. DG = nx.DiGraph([('a', 'b'), ('a', 'c'),('b', 'e'), ('b', 'd'),('c', 'e'), ('c', 'd'),('d', 'f'), ('f', 'g'), ('e', 'g')]) 

  2.  

  3. #显示graph 

  4. nx.draw_spring(DG,with_labels=True) 

  5. plt.title('有向无环图',fontproperties=myfont) 

  6. plt.axis('on') 

  7. plt.xticks([]) 

  8. plt.yticks([]) 

  9. plt.show() 

  10.  

  11. #这个graph拓扑排序序列有很多,这里只给出一种 

  12. print('扑排序序列:',list(nx.topological_sort(DG))) 

  13. print('逆扑排序序列:',list(reversed(list(nx.topological_sort(DG))))) 

拓扑排序算法示例
拓扑排序算法示例

输出:

拓扑序序列: ['a', 'b', 'c', 'e', 'd', 'f', 'g']
逆拓扑序序列: ['g', 'f', 'd','e', 'c', 'b', 'a']


11.5最大流问题

  1. #构建graph 

  2. G = nx.DiGraph() 

  3. G.add_edge('x','a', capacity=3.0) 

  4. G.add_edge('x','b', capacity=1.0) 

  5. G.add_edge('a','c', capacity=3.0) 

  6. G.add_edge('b','c', capacity=5.0) 

  7. G.add_edge('b','d', capacity=4.0) 

  8. G.add_edge('d','e', capacity=2.0) 

  9. G.add_edge('c','y', capacity=2.0) 

  10. G.add_edge('e','y', capacity=3.0) 

  11. pos=nx.spring_layout(G) 

  12.  

  13. #显示graph 

  14. edge_labels = nx.get_edge_attributes(G,'capacity') 

  15. nx.draw_networkx_nodes(G,pos) 

  16. nx.draw_networkx_labels(G,pos) 

  17. nx.draw_networkx_edges(G,pos) 

  18. nx.draw_networkx_edge_labels(G, pos,edge_labels) 

  19. plt.axis('on') 

  20. plt.xticks([]) 

  21. plt.yticks([]) 

  22. plt.show() 

  23.  

  24. #求最大流 

  25. flow_value, flow_dict = nx.maximum_flow(G, 'x', 'y') 

  26. print("最大流值: ",flow_value) 

  27. print("最大流流经途径: ",flow_dict) 

最大流问题示例
最大流问题示例

输出:

最大流值: 3.0
最大流流经途径: {'x': {'a': 2.0, 'b': 1.0}, 'c': {'y': 2.0}, 'b': {'c': 0, 'd': 1.0}, 'y': {}, 'd': {'e': 1.0}, 'e': {'y': 1.0}, 'a':{'c': 2.0}}

免责声明:文章转载自《NetworkX系列教程(10)-算法之四:拓扑排序与最大流问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ZooKeeper遇到double 数目过大,转String变成科学计数法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Proxy详解

一.Proxy基础 1. 什么是Proxy? Proxy是一个构造函数,可以通过它生成一个Proxy实例。 const proxy = new Proxy(target, handler); // target: 目标对象,待操作对象(可以是普通对象,数组,函数,proxy实例对象) // handler: 一个对象,最多可包含13个操作方法,也可以是空对...

vuex : 模块化改造

我们知道,vuex是vue技术栈中很重要的一部分,是一个很好用的状态管理库。 如果你的项目没有那么复杂,或者对vuex的使用没有那么重度,那么,是用不着modules功能的。 但如果你写着写着就发现你的vuex 代码过于臃肿,那么就可能需要modules功能来进行模块化改造了。 由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂...

【转载】蓝绿部署、红黑部署、AB测试、灰度发布/金丝雀发布、滚动发布的概念与区别

原文转载 https://blog.csdn.net/wangyinghong_2013/article/details/78650290 在有关微服务、DevOps、Cloud-native、系统部署等的讨论中,蓝绿部署、A/B 测试、灰度发布、滚动发布、红黑部署等概念经常被提到,它们有什么区别呢?通过搜索相关资料,做一个简单的辨析,如下: 蓝绿部署(B...

php中session_start()相关问题分析与解决办法

介绍下,在php中使用session时遇到的一些问题,与相关解决方法。1.错误提示Warning: Cannot send session cookie - headers already sentWarning: Cannot send session cache limiter - headers already sent分析及解决办法这一类问题,的原...

My97日期控件My97DatePicker使用(备忘)

前言: 最近老是找不到资料,痛之又痛的情况下,决定好好将所有涉及到的东西通通做个备忘记录。 参考网址: 1、http://www.my97.net/dp/demo/index.htm 2、http://www.mysuc.com/test/My97DatePicker/#m246 使用备忘—— 日期:2010-10-30 版本:4.7 功能:两个日期文本框...

django之表多对多查询

1 class Boy(models.Model): 2 name = models.CharField(max_length=32) 3 4 class Girl(models.Model): 5 nick = models.CharField(max_length=32) 6 7 class Love(...