当我运行它时,结束输出是一个包含列的表:
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)
答案 0 :(得分:0)
第一次迭代无条件地将smallestV和index设置为0,之后它们永远不会改变(假设非负权重)。
很难说出你在这里想做什么。