Python中对部分算法的实现——狄克斯特拉算法(取自《算法图解》[美]Aditya Bhargava 袁国忠 译)(自己留做笔记)
假设对于处理过的节点,没有前往该节点的更短路径,适用于加权图,不适用于存在负权边图。(要计算非加权图中的最短路径,可使用广度优先搜索)
![v2-5c050c55cd75bf4d2a7205667650a31e_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=c9edcf00-cf2f-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-5c050c55cd75bf4d2a7205667650a31e_b.jpg)
需要编写三个散列表,其中对于终点的时间,不知道,设置为无穷大。
![v2-0b939a4b969b8c9c90f3ed552301f695_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=c9edcf00-cf2f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-0b939a4b969b8c9c90f3ed552301f695_b.jpg)
代码:
graph
![v2-e2fa6ed8e1b3d6b4801713a918fc6549_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=c9edcf00-cf2f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-e2fa6ed8e1b3d6b4801713a918fc6549_b.jpg)
node
找出开销最低的节点
def
最终找到时间最短路线:
![v2-786d224800a0350de05dec978a9ec9d7_b.png](http://img-02.proxy.5ce.com/view/image?&type=2&guid=c9edcf00-cf2f-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-786d224800a0350de05dec978a9ec9d7_b.png)
并更新开销和父节点
![v2-5c273d010b1c133f90ff0f2c559efe60_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=c9edcf00-cf2f-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-5c273d010b1c133f90ff0f2c559efe60_b.jpg)
Python中对部分算法的实现——狄克斯特拉算法(取自《算法图解》[美]Aditya Bhargava 袁国忠 译)(自己留做笔记)
假设对于处理过的节点,没有前往该节点的更短路径,适用于加权图,不适用于存在负权边图。(要计算非加权图中的最短路径,可使用广度优先搜索)
需要编写三个散列表,其中对于终点的时间,不知道,设置为无穷大。
代码:
graph
node
找出开销最低的节点
def
最终找到时间最短路线:
并更新开销和父节点