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,631評論 1 118
  • 《市場的成功盡在一句話:預先行賞!》 晨讀《管子》,記載: 管仲對齊桓公說,一年的地稅是四萬二千斤黃金(據歷史學家...
    一畝岐江閱讀 247評論 2 1
  • 感謝世界上一直認認真真發明輪子的人。比如MarkDown的發明者,方便了我們的書寫。有一瞬間認為他們才是推動世界向...
    NoneLand閱讀 300評論 0 0
  • 不上班不行嗎? 不上班你養我嗎? 那你還是上班吧, 就簡單的三句臺詞,柳飄飄哭成淚人,當你遇到一個想養她一輩子的女...
    來瓶X5閱讀 423評論 3 4
  • 明確方法功能,精確(而不是近似)地實現方法設計。一個函數僅完成一件功能,即使簡單功能也應該編寫方法實現。說明:雖然...
    Rance935閱讀 957評論 0 1