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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 7,638评论 1 118
  • 《市场的成功尽在一句话:预先行赏!》 晨读《管子》,记载: 管仲对齐桓公说,一年的地税是四万二千斤黄金(据历史学家...
    一亩岐江阅读 249评论 2 1
  • 感谢世界上一直认认真真发明轮子的人。比如MarkDown的发明者,方便了我们的书写。有一瞬间认为他们才是推动世界向...
    NoneLand阅读 300评论 0 0
  • 不上班不行吗? 不上班你养我吗? 那你还是上班吧, 就简单的三句台词,柳飘飘哭成泪人,当你遇到一个想养她一辈子的女...
    来瓶X5阅读 431评论 3 4
  • 明确方法功能,精确(而不是近似)地实现方法设计。一个函数仅完成一件功能,即使简单功能也应该编写方法实现。说明:虽然...
    Rance935阅读 961评论 0 1