广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 软件教程 > Python技术 > 正文

Python拓扑排序_惠州计算机Python软件开发

作者:黄君发布时间:2021-01-13分类:Python技术浏览:991


导读:对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。

对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。

在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(英语:Topological sorting):

  • 每个顶点出现且只出现一次;

  • 若A在序列中排在B的前面,则在图中不存在从B到A的路径。

实例

from collections import defaultdict 


class Graph:

      def __init__(self,vertices):

            self.graph = defaultdict(list)

            self.V = vertices


     def addEdge(self,u,v):

            self.graph[u].append(v)


     def topologicalSortUtil(self,v,visited,stack):


            visited[v] = True


            for i in self.graph[v]:

                 if visited[i] == False:

                      self.topologicalSortUtil(i,visited,stack)


           stack.insert(0,v)

     def topologicalSort(self):

           visited = [False]*self.V

           stack =[]

 

           for i in range(self.V):

                 if visited[i] == False:

                      self.topologicalSortUtil(i,visited,stack)

 

         print (stack)  


g= Graph(6) 

g.addEdge(5, 2); 

g.addEdge(5, 0); 

g.addEdge(4, 0); 

g.addEdge(4, 1); 

g.addEdge(2, 3); 

g.addEdge(3, 1);     


print ("拓扑排序结果:")

g.topologicalSort()



执行以上代码输出结果为:

拓扑排序结果:
[5, 4, 2, 3, 1, 0]


点击咨询直接了解更多相关资料,我在惠州北大青鸟新方舟等你。

343.jpg

标签:惠州计算机软件培训惠州计算件软件开发惠州计算机软件基础惠州计算机Python软件开发惠州Python培训


Python技术排行
标签列表
网站分类
文章归档
最近发表