Python实现拓扑排序并绘图
绘图需要:
1. 需要安装graphviz软件,配置bin文件夹到环境变量 windows: 下载地址:https://graphviz.gitlab.io Linux:
# yum下载graphviz软件:
yum -y install graphviz
2. 需要安装python的graphviz模块
pip install graphviz
from collections import defaultdictfrom graphviz import Digraphclass Graph:def __init__(self, vertices):self.graph = defaultdict(list)self.V = verticesdef addEdge(self, u, v):self.graph[u].append(v)def topologicalSortUtil(self, v, visited, stack):visited[v] = Truefor node in self.graph[v]:if visited[node] == False:self.topologicalSortUtil(node, visited, stack)stack.insert(0, v)def topologicalSort(self):visited = {}for key, values in self.graph.items():visited[key] = Falsefor val in values:visited[val] = Falsestack = []for node in visited.keys():if visited[node] == False:self.topologicalSortUtil(node, visited, stack)return stackdef draw_graph(node_relations):dot = Digraph(comment='node graph', filename='blueprintNodeGraph-neato', format='png', engine='neato')dot.attr('node',shape='box', style='rounded,filled',fixedsize='false',fontname='Microsoft YaHei', fontsize='12')node_size = 0for relation in node_relations:node_size += 1# wrapsize = 12# dot.node(textwrap.fill(node_name, wrapsize))dot.edge(relation[0], relation[1], len='3')print(f"{relation[0]} -> {relation[1]}")dot.render(directory='doctest-output', view=True).replace('\\', '/')if __name__ == '__main__':node_relations = (('A', 'B'),('A', 'C'),('B', 'C'),('C', 'D'),('C', 'E'),('E', 'F'),('E', 'G'),('E', 'H'))# 拓扑排序g = Graph(8)for a, b in node_relations:g.addEdge(a, b)topo_list = g.topologicalSort()print(topo_list)# 绘图draw_graph(node_relations)
执行后输出:
# output
['A', 'B', 'C', 'E', 'H', 'G', 'F', 'D']
A -> B
A -> C
B -> C
C -> D
C -> E
E -> F
E -> G
E -> H
拓扑图:
Python实现拓扑排序并绘图相关推荐
- Python DAG—归简法—拓扑排序
原文:http://blog.csdn.net/lanchunhui/article/details/50957608 这个代码有bug,count不知道是什么?有时间再优化 Python 数据结构与 ...
- 【Python排序搜索基本算法】之拓扑排序
[Python排序搜索基本算法]之拓扑排序 版权声明:本文为博主原创文章,未经博主允许不得转载.
- 数据结构之图:有向图的拓扑排序,Python代码实现——26
有向图的拓扑排序 拓扑排序介绍 什么是拓扑排序? 一个有向图的拓扑排序(Topological sort 或 Topological ordering)是根据其有向边从顶点U到顶点V对其所有顶点的一个 ...
- python 拓扑排序 dfs bfs_图遍历算法之DFS/BFS
在计算机科学, 图遍历(Tree Traversal,也称图搜索)是一系列图搜索的算法, 是单次访问树结构类型数据(tree data structure)中每个节点以便检查或更新的一系列机制.图遍历 ...
- 拓扑排序(topological sorting)介绍及Python实现
目录 1. 拓扑排序 2. 拓扑排序存在的前提 3. 拓扑排序的唯一性问题 4. 拓扑排序算法原理 4.1 广度优先遍历 4.2 深度优先遍历 5. 代码实现 5.1 Graph类的实现 5.2 广度 ...
- python 拓扑排序_Python 拓扑排序
Python 拓扑排序 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G) ...
- LeetCode 207. Course Schedule--有向图找环--面试算法题--DFS递归,拓扑排序迭代--Python
题目地址:Course Schedule - LeetCode There are a total of n courses you have to take, labeled from 0 to n ...
- python 拓扑排序 dfs bfs_拓扑排序的DFS和BFS
博主以前有一个疑问,DFS和BFS各自的适用范围是?我想你今天看了这篇文章之后会有一个判断! BFS 数据结构与算法分析:c语言描述(p217) 已经存在一个Indgree入度数组(indgree[v ...
- python 拓扑排序_拓扑排序(topsort)算法详解
在图论中,由某个集合上的偏序得到全序的策略就是拓补排序算法.拓扑排序常出现在涉及偏序关系的问题中,例如时序的先后.事物的依赖等.针对这些问题拓扑排序通常能有效地给出可行解. 为了便于理解,我们先来看一 ...
最新文章
- css实现多行文字溢出隐藏——前端小问题不定时更新
- 各路资本暗战智能家居
- 看完这个“秒杀”设计方案!我有点慌了
- linux p2p视频播放器,avplayer: 一个基于FFmpeg、libtorrent的P2P播放器实现.
- 手把手教你配置VS Code 远程开发工具,工作效率提升N倍
- @JsonProperty注解解析
- JavaScript隐式类型转换
- 10.一文了解JAVA反射超详尽知乎
- 微软正式发布 Silverlight 5
- DataGridView - Column named XXX cannot be found
- 如何将运维的报警做成运营的报警--Java后端架构
- 学生寝室管理系统-C语言版
- java百度地图离线LBS_百度地图之离线下载功能
- arcgis离线地图Java_ArcGIS API For Android离线地图的实现
- 微信小程序倒计时功能
- matlab白噪音wav,为声音文件添加白噪音
- word文档通配符换行_[Word] 学习笔记
- 华为交换机调试软件_无忌之谈华为005丨 “华为系”黄埔军校诞生记
- 解决Allocate exception for servlet XXXServlet
- 【后续还会补充】Sublime Text 4 常用插件安装及配置方法