NetworkX系列教程(10)-算法之四:拓扑排序与最大流问题
重头戏部分来了,写到这里我感觉得仔细认真点了,可能在NetworkX中,实现某些算法就一句话的事,但是这个算法是做什么的,用在什么地方,原理是怎么样的,不清除,所以,我决定先把图论
中常用算法弄个明白在写这部分.
图论常用算法看我的博客:
下面我将使用NetworkX实现上面的算法,建议不清楚的部分打开两篇博客对照理解.
我将图论的经典问题及常用算法的总结写在下面两篇博客中:
图论---问题篇
图论---算法篇
目录:
* 11.4拓扑排序算法(TSA)
* 11.5最大流问题
注意:如果代码出现找不库,请返回第一个教程,把库文件导入.
11.4拓扑排序算法(TSA)
- DG = nx.DiGraph([('a', 'b'), ('a', 'c'),('b', 'e'), ('b', 'd'),('c', 'e'), ('c', 'd'),('d', 'f'), ('f', 'g'), ('e', 'g')])
- #显示graph
- nx.draw_spring(DG,with_labels=True)
- plt.title('有向无环图',fontproperties=myfont)
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- plt.show()
- #这个graph拓扑排序序列有很多,这里只给出一种
- print('扑排序序列:',list(nx.topological_sort(DG)))
- print('逆扑排序序列:',list(reversed(list(nx.topological_sort(DG)))))

输出:
拓扑序序列: ['a', 'b', 'c', 'e', 'd', 'f', 'g']
逆拓扑序序列: ['g', 'f', 'd','e', 'c', 'b', 'a']
11.5最大流问题
- #构建graph
- G = nx.DiGraph()
- G.add_edge('x','a', capacity=3.0)
- G.add_edge('x','b', capacity=1.0)
- G.add_edge('a','c', capacity=3.0)
- G.add_edge('b','c', capacity=5.0)
- G.add_edge('b','d', capacity=4.0)
- G.add_edge('d','e', capacity=2.0)
- G.add_edge('c','y', capacity=2.0)
- G.add_edge('e','y', capacity=3.0)
- pos=nx.spring_layout(G)
- #显示graph
- edge_labels = nx.get_edge_attributes(G,'capacity')
- nx.draw_networkx_nodes(G,pos)
- nx.draw_networkx_labels(G,pos)
- nx.draw_networkx_edges(G,pos)
- nx.draw_networkx_edge_labels(G, pos,edge_labels)
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- plt.show()
- #求最大流
- flow_value, flow_dict = nx.maximum_flow(G, 'x', 'y')
- print("最大流值: ",flow_value)
- 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)-算法之四:拓扑排序与最大流问题的更多相关文章
- NetworkX系列教程(10)-算法之三:关键路径问题
小书匠Graph图论 重头戏部分来了,写到这里我感觉得仔细认真点了,可能在NetworkX中,实现某些算法就一句话的事,但是这个算法是做什么的,用在什么地方,原理是怎么样的,不清除,所以,我决定先把图 ...
- NetworkX系列教程(10)-算法之五:广度优先与深度优先
小书匠Graph图论 重头戏部分来了,写到这里我感觉得仔细认真点了,可能在NetworkX中,实现某些算法就一句话的事,但是这个算法是做什么的,用在什么地方,原理是怎么样的,不清除,所以,我决定先把图 ...
- NetworkX系列教程(10)-算法之一:最短路径问题
小书匠Graph图论 重头戏部分来了,写到这里我感觉得仔细认真点了,可能在NetworkX中,实现某些算法就一句话的事,但是这个算法是做什么的,用在什么地方,原理是怎么样的,不清除,所以,我决定先把图 ...
- NetworkX系列教程(10)-算法之二:最小/大生成树问题
小书匠 Graph 图论 重头戏部分来了,写到这里我感觉得仔细认真点了,可能在NetworkX中,实现某些算法就一句话的事,但是这个算法是做什么的,用在什么地方,原理是怎么样的,不清除,所以,我决定 ...
- 算法学习 拓扑排序(TopSort)
拓扑排序 一.基本概念 在一个有向无环图(Directed Acyclic Graph, DAG)中,规定< u,v > 表示一条由u指向v的的有向边.要求对所有的节点排序,使得每一条有向 ...
- NetworkX系列教程(9)-线性代数相关
小书匠 Graph 图论 学过线性代数的都了解矩阵,在矩阵上的文章可做的很多,什么特征矩阵,单位矩阵等.grpah存储可以使用矩阵,比如graph的邻接矩阵,权重矩阵等,这节主要是在等到graph后 ...
- NetworkX系列教程(2)-graph生成器
小书匠Graph图论 本节主要讲解如何快速使用内置的方法生成graph,官方的文档在这里,里面包含了networkX的所有graph生成器,下面的内容只是我节选的内容,并将graph画出来而已. 声明 ...
- NetworkX系列教程(1)-创建graph
小书匠Graph图论 研究中经常涉及到图论的相关知识,而且常常面对某些术语时,根本不知道在说什么.前不久接触了NetworkX这个graph处理工具,发现这个工具已经解决绝大部分的图论问题(也许只是我 ...
- HTML5游戏开发系列教程10(译)
原文地址:http://www.script-tutorials.com/html5-game-development-lesson-10/ 最后我们将继续使用canvas来进行HTML5游戏开发系列 ...
随机推荐
- S04_CH02_工程移植ubuntu并一键制作启动盘
S04_CH02_工程移植ubuntu并一键制作启动盘 2.1概述 2.2搭建硬件系统 本章硬件工程还是使用<S04_CH01_搭建工程移植LINUX/测试EMMC/VGA>所搭建的VIV ...
- Springboot模板(thymeleaf、freemarker模板)
目的: 1.thymeleaf模板 2.Freemarker模板 thymeleaf模板 thymeleaf 的优点: 支持html5标准,页面无须部署到servlet开发到服务器上,直接通过浏览器就 ...
- javascript:void(0);的含义以及使用场景
一.含义: javascript:是伪协议,表示内容通过javascript执行. void(0)表示不作任何操作. 二.使用场景 1.href=”javascript:void(0);” 作用:为了 ...
- SQL Server存储过程中字符串前加N的含义
使用方法: N'字符串' 解释: 意思为后面的数据类型为NChar或者NVarchar 使用N前缀 在服务器上执行的代码中(例如在存储过程和触发器中)显示的Unicode字符串常量必须以大写字母N为前 ...
- Vue 单元测试 使用mocha+jest
目录 Vue 单元测试 mocha+jest jest 实例 mocha expect方法断言 示例代码 Vue 单元测试 官网:https://vue-test-utils.vuejs.org/zh ...
- SMARTY的知识
smarty的原理: <?php class Smarty { $ldelimiter = "{";//左分隔符 $rdelimiter = "}";// ...
- 打印html页面
// 打印类属性.方法定义 const Print = function (dom, options) { if (!(this instanceof Print)) return new Print ...
- ScrollView小记
常用代理方法: - (void)scrollViewDidScroll:(UIScrollView *)scrollView 只有 [self.scrolView setContentOffset: ...
- mongodb副本集和分片存储理论整理
目录 理论概述 一.各种集群简述 二.原理 主从复制 Mongodb副本集 理论概述 一.各种集群简述 mongodb有三种集群搭建方式: 分片:sharding.指为处理大量数据,将数据分开存储,不 ...
- Python memory error的问题
前段时间在读取一个文件的过程中,竟然出现了Memory Error!简直让我怀疑自己买了个假电脑,毕竟是8G内存i7处理器,一度怀疑自己装了假的内存条....下面说一下几个解题步骤....一般就是用下 ...