Dijkstra的算法概念和编码问题

时间:2012-02-10 12:35:02

标签: python algorithm dijkstra

问题已更新

我目前正在使用Python实现Dijkstra的算法,我已经在这里查看了有关算法的其他问题,似乎没有一个适合我想要的。

目前我的程序读取两个文本文件,一个包含网络路由图network.txt(基本上是路由成本)。

0,2,4,1,6,0,0
2,0,0,0,5,0,0
4,0,0,0,0,5,0
1,0,0,0,1,1,0
6,5,0,1,0,5,5
0,0,5,1,5,0,0
0,0,0,0,5,0,0

和一个包含所需路线的路线(route.txt)

B>F

网络路由表: (每条线路是节点及其链路,因此节点A链接到B,C,D和E)

      A  B  C  D  E  F  G

A    [0, 2, 4, 1, 6, 0, 0]
B    [2, 0, 0, 0, 5, 0, 0]
C    [4, 0, 0, 0, 0, 5, 0]
D    [1, 0, 0, 0, 1, 1, 0]
E    [6, 5, 0, 1, 0, 5, 5]
F    [0, 0, 5, 1, 5, 0, 0]
G    [0, 0, 0, 0, 5, 0, 0]

网络上的节点: ([Structure] PreviousNode,DistanceFromSource,Visited)

A    [-1, 1000000000, False]
B    [-1, 1000000000, False]
C    [-1, 1000000000, False]
D    [-1, 1000000000, False]
E    [-1, 1000000000, False]
F    [-1, 1000000000, False]
G    [-1, 1000000000, False]

我有点理解Dijkstra的算法,但是使用了我拥有的两种数据结构,再加上必须用Python编写它,我不知道从哪里开始,因为我无法理解如何做这不知道语言。

我对下一步要做的事情有一些非常基本的“伪代码”

  
      
  • 3 - 检查当前节点的所有未访问的邻居并进行计算   他们与起始节点的暂定距离,覆盖了   新值较低时的现有距离

  •   
  • 4 - 将当前节点标记为已访问(不会再次检查)

  •   
  • 5 - 如果不在目的地并且存在未访问的节点,则转到具有最小>的未访问节点。距初始节点的距离并使其成为当前节点,否则结束

  •   
  • 6 - 回到3

  •   

是否有人能够帮助我将“伪代码”转换为代码,或者甚至更有意义的伪代码将会很好,因为我正在努力解决这个问题

1 个答案:

答案 0 :(得分:2)

在对象之间使用本机python“链接”,例如:

edges = {1: set([2,3,4]), 2: set([1,5]), ....}
costs = {(1, 2): 99.3, (1, 3): 127.77, ...}

没有必要为这样简单的问题创建自己的类。

注意灵感:

http://python.mirocommunity.org/video/1530/pycon-2010-mastering-team-play