拓扑排序
2016-05-10 17:10
337 查看
在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(英语:Topological sorting)。
每个顶点出现且只出现一次;
若A在序列中排在B的前面,则在图中不存在从B到A的路径。
也可以定义为:拓扑排序是对有向无环图的顶点的一种排序,它使得如果存在一条从顶点A到顶点B的路径,那么在排序中B出现在A的后面。
![](http://img.blog.csdn.net/20160510170714446)
进行拓扑排序的python代码:
每个顶点出现且只出现一次;
若A在序列中排在B的前面,则在图中不存在从B到A的路径。
也可以定义为:拓扑排序是对有向无环图的顶点的一种排序,它使得如果存在一条从顶点A到顶点B的路径,那么在排序中B出现在A的后面。
进行拓扑排序的python代码:
class Node: def __init__(self,id,in_node,out_node): self.id = id; self.in_node = in_node; self.out_node = out_node; list = []; list.append(Node(0,[2],[6,1,5])); list.append(Node(1,[0],[])); list.append(Node(2,[],[0,3])); list.append(Node(3,[2],[5])) list.append(Node(4,[5,6],[])) list.append(Node(5,[0,3],[4])) list.append(Node(6,[0,7],[9,4])) list.append(Node(7,[8],[6])) list.append(Node(8,[],[7])) list.append(Node(9,[6],[10,11,12])) list.append(Node(10,[9],[])) list.append(Node(11,[9],[12])) list.append(Node(12,[9,11],[])) def find_in_empty_node(list): for node in list: if(len(node.in_node) == 0): return node; return None; def find_node(list,id): for node in list: if(node.id == id): return node; def tidy_list(list): for node in list: for sub_node in node.in_node: if(find_node(list,sub_node) == None): node.in_node.remove(sub_node) while(1): node = find_in_empty_node(list); if(None == node): break; print node.id; list.remove(node); tidy_list(list);
相关文章推荐
- 第十一周实践项目(4)
- 移动端头像上传AJax input file
- Android KITKAT 以上实现沉浸式状态栏
- SoapUI测试接口
- 加分二叉树(感觉像是区间dp)
- 《电路基础》减法运算放大器
- 二分查找(折半查找)
- SVG显示异常
- (四)索引
- android中bitmap压缩的几种方法的解读
- vim的用法
- 博客园用户体验
- u3d
- Android开发实践(二)android程序结构简析
- MyCat - 源代码篇(12)
- How to set up MultiComboBoxColumn?
- Android4.0 Launcher 源码分析2——Launcher内容加载绑定详细过程
- Android4.0 Launcher 源码分析1——Launcher整体结构
- 第十一周阅读程序(补充)----(3)
- 【Tumload】-tumblr视频下载神器发布啦