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

[算法导论]迪克斯特拉算法 @ Python的更多相关文章

  1. 用js简单实现一下迪克斯特拉算法

    今天看书看到了迪克斯特拉算法,大概用js实现一下呢,计算最短路径. 首先,迪克斯特拉算法只适用于有向无环图,且没有负权重,本例关系图如下哦,数字为权重,emmmm,画得稍微有点丑~ //大概用js实现 ...

  2. 单源最短路径算法——Dijkstra算法(迪杰斯特拉算法)

    一 综述 Dijkstra算法(迪杰斯特拉算法)主要是用于求解有向图中单源最短路径问题.其本质是基于贪心策略的(具体见下文).其基本原理如下: (1)初始化:集合vertex_set初始为{sourc ...

  3. [算法导论]二叉查找树的实现 @ Python

    <算法导论>第三版的BST(二叉查找树)的实现: class Tree: def __init__(self): self.root = None # Definition for a b ...

  4. 图(最短路径算法————迪杰斯特拉算法和弗洛伊德算法).RP

    文转:http://blog.csdn.net/zxq2574043697/article/details/9451887 一: 最短路径算法 1. 迪杰斯特拉算法 2. 弗洛伊德算法 二: 1. 迪 ...

  5. 算法-迪杰斯特拉算法(dijkstra)-最短路径

    迪杰斯特拉算法(dijkstra)-最短路径 简介: 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中 ...

  6. 算法导论 - 基础知识 - 算法基础(插入排序&归并排序)

    在<算法导论>一书中,插入排序作为一个例子是第一个出现在该书中的算法. 插入排序: 对于少量元素的排序,它是一个有效的算法. 插入排序的工作方式像许多人排序一手扑克牌.开始时,我们手中牌为 ...

  7. 广度优先搜索(BreadthFirstSearch)& 迪克斯特拉算法 (Dijkstra's algorithm)

    BFS可回答两类问题: 1.从节点A出发,有前往节点B的路径吗? 2.从节点A出发,前往节点B的哪条路径经过的节点最少? BFS中会用到"队列"的概念.队列是一种先进先出(FIFO ...

  8. [算法导论]哈希表 @ Python

    直接寻址方式: class HashTable: def __init__(self, length): self.T = [None for i in range(length)] class Da ...

  9. 算法导论学习-prim算法

    一. 关于最小生成树 对于无向连通图G=(V,E),其中V表示图的顶点,E表示图的边,对于每条边都有一个权值,可以理解为边a->b的权值C为从a走到b要走的路程为C.现在我们希望找到一个无回路的 ...

随机推荐

  1. windows下使用adb工具查看android程序cpu和内存消耗情况

    在实际的开发当中,尤其软件运行在一个硬件设备比较差的环境下,对软件占用资源大的问题是开发者们必须要解决的问题,系统比较卡.觉得应该看看程序的cpu和内存消耗 一直以来都在windows下编程,已经习惯 ...

  2. Restful风格API接口开发springMVC篇

    Restful风格的API是一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机 ...

  3. AngularJs的$http使用随笔

    AngularJs的$http服务是Angularjs自带的核心服务之一,用来与HTTP远程服务器交互. 关于$http使用,我体会的一下几点注意: 1.在使用是报“Uncaught Referenc ...

  4. ubuntu Screen 的比较详细的命令

    Linux Screen Commands For Developers 转自:http://fosshelp.blogspot.com/2014/02/linux-screen-commands-f ...

  5. Windows升级(安装)MySQL 5.7.x 解压版 + 异常处理

    说明 版本升级(个人原因): 因为5.5的版本不能执行如下sql语句,故卸装5.5升级安装mysql-5.7.15: `timeName` timestamp(3) NULL DEFAULT NULL ...

  6. UVA 11992 Fast Matrix Operations(线段树:区间修改)

    题目链接 2015-10-30 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=s ...

  7. haskell中的do

    在haskell中,有一个do的语句专门用来做一些不那么“干净”的事情,比如读写都需要用do来开头 一开始以为do的作用是做monad,后来发现是错误的,其实do做的事情是包裹一个顺序操作 比如在如下 ...

  8. Keepalived+tomcat的HA配置

    需要节点 NODE1—————-IP:192.168.0.2 NODE2—————-IP:192.168.0.3 VIP—————-IP:192.168.0.10 以下操作在2台机器上都要运行 先编辑 ...

  9. 个性二维码开源专题<后背景>

    //设置图片资源 private Image img1; public override void SetParam() { base.SetParam(); //读取图片 string _image ...

  10. Dynamic CRM 2013学习笔记(二十)字段改变事件的二种实现方法

    CRM里有二种方式实现字段change事件,一种是在form里,一种完全通过js来实现.本文介绍下二者的用途及区别. 1. Form里用法 这种方式估计其实也是添加一个js的function. 这种方 ...