欢迎访问宙启技术站
智能推送

使用Python中的Graph()类实现拓扑排序算法

发布时间:2024-01-04 12:37:45

拓扑排序算法是一种对有向无环图进行排序的算法。在拓扑排序中,每个顶点表示一个任务,图中的有向边表示任务之间的依赖关系,即一个任务必须在其依赖任务之后执行。拓扑排序的结果是一个任务序列,满足任何依赖关系的任务一定在其依赖任务之后。

在Python中,可以使用Graph()类来实现拓扑排序算法。Graph()类是一个表示有向图的类,通过顶点和边的集合来表示图中的结构。在Graph()类中,我们可以使用add_vertex()方法添加顶点,使用add_edge()方法添加边。

下面是一个使用Graph()类实现拓扑排序算法的例子:

class Graph:
    def __init__(self):
        self.vertices = {}

    def add_vertex(self, vertex):
        if vertex not in self.vertices:
            self.vertices[vertex] = []

    def add_edge(self, src, dest):
        if src in self.vertices and dest in self.vertices:
            self.vertices[src].append(dest)

    def topological_sort(self):
        visited = set()
        result = []

        def dfs(vertex):
            visited.add(vertex)
            for neighbor in self.vertices[vertex]:
                if neighbor not in visited:
                    dfs(neighbor)
            result.insert(0, vertex)

        for vertex in self.vertices:
            if vertex not in visited:
                dfs(vertex)

        return result


g = Graph()
g.add_vertex('A')
g.add_vertex('B')
g.add_vertex('C')
g.add_vertex('D')
g.add_vertex('E')
g.add_edge('A', 'B')
g.add_edge('B', 'C')
g.add_edge('B', 'D')
g.add_edge('C', 'D')
g.add_edge('D', 'E')

print(g.topological_sort())

在这个例子中,我们创建了一个有向无环图,图中有5个顶点'A'、'B'、'C'、'D'、'E',并且有5条有向边来表示顶点之间的依赖关系。然后我们调用topological_sort()方法来进行拓扑排序,并打印排序结果。

输出结果为['A', 'B', 'C', 'D', 'E'],表示按照拓扑顺序依次执行任务的顺序。

通过使用Graph()类实现拓扑排序算法,我们可以方便地对有向无环图进行排序,以满足任务之间的依赖关系。