算法:拓扑排序
来源:互联网 发布:含有大数据的新闻 编辑:程序博客网 时间:2024/06/10 17:27
定义:
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。
应用:
有向图来表示,图中的顶点代表活动(子工程),图中的有向边代表活动的先后关系,即有向边的起点的活动是终点活动的前序活动,只有当起点活动完成之后,其终点活动才能进行。通常,我们把这种顶点表示活动、边表示活动间先后关系的有向图称做顶点活动网(Activity On Vertex network),简称AOV网。即不应该带有回路,因为若带有回路,则回路上的所有活动都无法进行。
拓扑排序算法(python):
v表示顶点:v=['a','b','c','d','e'],e表示有向边:e=[('a','b'),('a','d'),('b','c'),('d','c'),('d','e'),('e','c')]
def topoSort(vertex,edge): def indegree0(vertex, edge): '''删除度为0的节点''' if vertex==[]: return None tmpv=vertex[:] for i in edge: if i[1] in tmpv: tmpv.remove(i[1]) if tmpv==[]: return -1 for v in tmpv: for i in range(len(edge)): if v in edge[i]: edge[i]='toDel' #占位,之后删掉 if edge: eset=set(edge) eset.remove('toDel') edge[:]=list(eset) if vertex: for v in tmpv: vertex.remove(v) return tmpv # 开始拓扑排序 result=[] while True: nodes=indegree0(vertex,edge) if nodes==None: break if nodes==-1: print('there\'s a circle.') return None result.extend(nodes) return result
0 0
- 贪婪算法--- 拓扑排序
- 贪婪算法--- 拓扑排序
- 拓扑排序算法
- 拓扑排序算法
- 拓扑排序算法
- 【算法导论】拓扑排序
- 【算法导论】拓扑排序
- 拓扑排序算法
- 拓扑排序算法
- 拓扑排序算法
- 拓扑排序算法
- 算法 拓扑排序
- 算法 拓扑排序
- 拓扑排序算法
- 算法摘记 拓扑排序
- 拓扑排序算法
- 【数据结构】拓扑排序算法
- 拓扑排序算法模板
- C 命名指针的更好习惯
- LeetCode197
- 多个数据源配置
- android:ToolBar详解
- 霍夫变换与广义霍夫变换
- 算法:拓扑排序
- 安卓App热补丁动态修复技术介绍
- UVA-1631 Locker(DP)
- J - 序列变换---没找到原题----【贪心+二分】
- c++第四次实验:输出星号图
- Afinal框架(简介)
- 使用jackson 进行json字符串转java bean报错
- Container With Most Water (容器中盛最多的水)
- DNS解析过程