绘图需要:

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实现拓扑排序并绘图相关推荐

  1. Python DAG—归简法—拓扑排序

    原文:http://blog.csdn.net/lanchunhui/article/details/50957608 这个代码有bug,count不知道是什么?有时间再优化 Python 数据结构与 ...

  2. 【Python排序搜索基本算法】之拓扑排序

    [Python排序搜索基本算法]之拓扑排序 版权声明:本文为博主原创文章,未经博主允许不得转载.

  3. 数据结构之图:有向图的拓扑排序,Python代码实现——26

    有向图的拓扑排序 拓扑排序介绍 什么是拓扑排序? 一个有向图的拓扑排序(Topological sort 或 Topological ordering)是根据其有向边从顶点U到顶点V对其所有顶点的一个 ...

  4. python 拓扑排序 dfs bfs_图遍历算法之DFS/BFS

    在计算机科学, 图遍历(Tree Traversal,也称图搜索)是一系列图搜索的算法, 是单次访问树结构类型数据(tree data structure)中每个节点以便检查或更新的一系列机制.图遍历 ...

  5. 拓扑排序(topological sorting)介绍及Python实现

    目录 1. 拓扑排序 2. 拓扑排序存在的前提 3. 拓扑排序的唯一性问题 4. 拓扑排序算法原理 4.1 广度优先遍历 4.2 深度优先遍历 5. 代码实现 5.1 Graph类的实现 5.2 广度 ...

  6. python 拓扑排序_Python 拓扑排序

    Python 拓扑排序 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G) ...

  7. 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 ...

  8. python 拓扑排序 dfs bfs_拓扑排序的DFS和BFS

    博主以前有一个疑问,DFS和BFS各自的适用范围是?我想你今天看了这篇文章之后会有一个判断! BFS 数据结构与算法分析:c语言描述(p217) 已经存在一个Indgree入度数组(indgree[v ...

  9. python 拓扑排序_拓扑排序(topsort)算法详解

    在图论中,由某个集合上的偏序得到全序的策略就是拓补排序算法.拓扑排序常出现在涉及偏序关系的问题中,例如时序的先后.事物的依赖等.针对这些问题拓扑排序通常能有效地给出可行解. 为了便于理解,我们先来看一 ...

最新文章

  1. css实现多行文字溢出隐藏——前端小问题不定时更新
  2. 各路资本暗战智能家居
  3. 看完这个“秒杀”设计方案!我有点慌了
  4. linux p2p视频播放器,avplayer: 一个基于FFmpeg、libtorrent的P2P播放器实现.
  5. 手把手教你配置VS Code 远程开发工具,工作效率提升N倍
  6. @JsonProperty注解解析
  7. JavaScript隐式类型转换
  8. 10.一文了解JAVA反射超详尽知乎
  9. 微软正式发布 Silverlight 5
  10. DataGridView - Column named XXX cannot be found
  11. 如何将运维的报警做成运营的报警--Java后端架构
  12. 学生寝室管理系统-C语言版
  13. java百度地图离线LBS_百度地图之离线下载功能
  14. arcgis离线地图Java_ArcGIS API For Android离线地图的实现
  15. 微信小程序倒计时功能
  16. matlab白噪音wav,为声音文件添加白噪音
  17. word文档通配符换行_[Word] 学习笔记
  18. 华为交换机调试软件_无忌之谈华为005丨 “华为系”黄埔军校诞生记
  19. 解决Allocate exception for servlet XXXServlet
  20. 【后续还会补充】Sublime Text 4 常用插件安装及配置方法

热门文章

  1. 数值计算方法——第一节方程的根的求解
  2. 软件工程实验报告 一
  3. 一个员工的离职成本到底有多恐怖!
  4. Junction 详细使用方法
  5. 机器学习中的数学原理——似然函数
  6. 程序猿和测试攻城狮崩溃的瞬间,这比喻太形象了,你是否已笑喷~
  7. 金额:元与分之间转换
  8. pythondictrunoob_Python3 字典 | 菜鸟教程
  9. 什么是 TPMS(轮胎压力监视系统)系统
  10. c++ Eigen库中的矩阵分析为什么使用QR分解