【发布时间】:2012-02-10 12:35:02
【问题描述】:
问题更新
我目前正致力于在 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]
网络上的节点: ([结构] 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
有没有人能帮助我将“伪代码”翻译成代码或更有意义的伪代码,因为我正在努力解决这个问题
【问题讨论】:
-
我不懂python。尽管如此,如果我是你,我会尝试将你的特定问题的词汇与算法分开,即将你如何获取数据的细节与实际使用它分开。 Dijkstra 的算法实际上想知道边缘权重,而不是你如何获得这些权重。所以,写一个 Dijkstra 的伪代码,然后给它提供它想要的信息。 HTH
-
“使用图形等的复杂版本”——Dijkstra 的算法是一种基于图形的算法,因此了解这些对于掌握 Dijkstra 的算法非常重要。