[算法导论]拓扑排序 @ 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决