[算法导论]迪克斯特拉算法 @ Python
class Graph: def __init__(self): self.V = [] self.w = {} class Vertex: def __init__(self, x): self.key = x self.color = 'white' self.d = 10000 self.pi = None self.adj = [] class Solution(): def InitializeSingleSource(self, G, s): for v in G.V: v.d = 10000 v.pi = None s.d = 0 def Relax(self, u, v, w): if v.d > u.d + w[(u, v)]: v.d = u.d + w[(u, v)] v.pi = u def Dijkstra(self, G, w, s): self.InitializeSingleSource(G, s) S = set() Q = G.V[:] while Q != []: u = self.ExtractMin(Q, S) S.add(u) for v in u.adj: self.Relax(u, v, w) def ExtractMin(self, Q, S): Q.sort(key=lambda v: v.d) return Q.pop(0) if __name__ == '__main__': s = Vertex('s') t = Vertex('t') y = Vertex('y') x = Vertex('x') z = Vertex('z') s.adj = [t, y] y.adj = [t, z, x] t.adj = [x, y] x.adj = [z] z.adj = [x, s] G = Graph() G.V = [s, t, y, x, z] G.w = { (s,t):10, (s,y):5, (t,y):2, (y,t):3, (t,x):1, (y,z):2, (x,z):4, (z,x):6, (y,x):9, (z,s):7 } m = Solution() m.Dijkstra(G, G.w, s) for v in G.V: if v != s: print v.key, v.d, v.pi.key else: print v.key, v.d, v.pi
【推荐】国内首个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 重磅开源!
· 字符编码:从基础到乱码解决