您的位置:首页 > 编程语言 > Python开发

[算法导论]拓扑排序 @ Python

2015-03-17 16:54 288 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: