Dijkstra的最短路径算法

时间:2014-04-22 22:28:08

标签: python algorithm

当我运行它时,结束输出是一个包含列的表:

Vertex - DisVal - PrevVal - Known.

连接到我的开始节点的两个节点显示正确的值,但其他节点最终都没有更新。如果有人想看,我可以包含完整的程序代码,但我知道这里的问题是孤立的。我认为这可能与不正确改变索引有关。这是一个简单的dijsktra btw,而不是堆/ Q版本。

以下是代码的其余部分:http://ideone.com/UUOUn8

adjList如下所示:[1:2,4,2:6,3,...]其中显示连接到顶点的每个节点。 DV =距离值(权重),PV =先前值(节点),已知=有蜜蜂访问

def dijkstras(graph, adjList):
    pv = [None] * len(graph.nodes)
    dv = [999]*len(graph.nodes)
    known = [False] * len(graph.nodes)

    smallestV = 9999
    index = 0
    dv[0] = 0
    known[0] = True
    for i in xrange(len(dv)):
        if dv[i] < smallestV and known[i]:
            smallestV = dv[i]
            index = i
        known[index] = True
        print smallestV
        print index
        for edge in adjList[index]:
            if (dv[index]+graph.weights[(index, edge)] < dv[edge]):
                dv[edge] = dv[index] + graph.weights[(index, edge)]
                pv[edge] = index

    printTable(dv, pv, known)

1 个答案:

答案 0 :(得分:0)

第一次迭代无条件地将smallestV和index设置为0,之后它们永远不会改变(假设非负权重)。

很难说出你在这里想做什么。