zoukankan      html  css  js  c++  java
  • [算法导论]拓扑排序 @ Python

    class Graph:
        def __init__(self):
            self.V = []
    
    class Vertex:
        def __init__(self, x):
            self.key = x
            self.color = 'white'
            self.d = 10000
            self.f = 10000
            self.pi = None
            self.adj = []
            self.next = None
    
    class Solution:
        def Dfs(self, G):
            for u in G.V:
                u.color = 'white'
                u.pi = None
            global time
            time = 0
            for u in G.V:
                if u.color == 'white':
                    self.DfsVisit(G, u)
    
        def DfsVisit(self, G, u):
            global time
            time = time + 1
            u.d = time
            u.color = 'gray'
            for v in u.adj:
                if v.color == 'white':
                    self.DfsVisit(G, v)
                    v.pi = u
            u.color = 'black'
            time = time + 1
            u.f = time
    
        def TopologicalSort(self, G):
            LinkedList = Vertex('#')
            self.Dfs(G)
            G.V.sort(key=lambda v:v.f)
            for v in G.V:
                v.next = LinkedList.next
                LinkedList.next = v
            return LinkedList
    
    if __name__ == '__main__':
        undershorts = Vertex('undershorts') 
        socks = Vertex('socks') 
        pants = Vertex('pants') 
        shoes = Vertex('shoes') 
        belt = Vertex('belt')
        shirt = Vertex('shirt') 
        tie = Vertex('tie')
        jacket = Vertex('jacket') 
        watch = Vertex('watch')
    
        undershorts.adj = [pants, shoes]
        socks.adj = [shoes]
        pants.adj = [belt, shoes]
        shoes.adj = []
        belt.adj = [jacket]
        shirt.adj = [belt, tie]
        tie.adj = [jacket]
        jacket.adj = []
        watch.adj = []
    
        G = Graph()
        G.V = [undershorts,socks,pants,shoes,belt,shirt,tie,jacket,watch]
    
        m = Solution()
        Sort_List = m.TopologicalSort(G)
        p = Sort_List
        while p.next != None:
            print p.next.key, p.next.f
            p = p.next
  • 相关阅读:
    Python入门 日志打印
    Python入门 面向对象
    Python入门 更换pip源的方法
    Python入门 模块
    Python入门 函数式编程
    四月份该做的事情
    Docker入门 配置篇
    Python入门 序列章
    Python入门 值内存管理与所有的关键字
    论操作系统的IO
  • 原文地址:https://www.cnblogs.com/zuoyuan/p/4344830.html
Copyright © 2011-2022 走看看