[算法导论]拓扑排序 @ 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
相关文章推荐
- [算法导论]迪克斯特拉算法 @ Python
- 基本数据结构(算法导论)与python
- 【Python排序搜索基本算法】之拓扑排序
- 算法导论程序8--堆(Python)
- 算法导论 python代码 第四章
- algorithm: heap sort in python 算法导论 堆排序
- [算法导论]BFS @ Python
- 【Python排序搜索基本算法】之拓扑排序
- 算法导论快速排序python实现
- 【python菜鸟日记】-03算法导论-归并排序
- 【Python排序搜索基本算法】之深度优先搜索、广度优先搜索、拓扑排序、强联通&Kosaraju算法
- 算法导论程序38--最长公共子序列(Python)
- 算法导论详解(1) 第二章算法基础+python实现
- [算法导论]quicksort algorithm @ Python
- Python编写算法导论基本算法
- 【算法导论】拓扑排序
- Python 数据结构与算法——拓扑排序
- 基本数据结构(算法导论)与python