当您在此处调整新路径距离时
if D[edge.Destination] > D[edge.Source]+edge.Weight { D[edge.Destination] = D[edge.Source] + edge.Weight设置一些数组元素(例如,
P对于“ parent”)以指出您
Destination来自
Source。
P[edge.Destination] = edge.Source
算法结束后,在此数组中,每个顶点将在从起始顶点开始的路径上具有其前身。
PS。好的,不适合数组和索引…
Prev在“顶点”中添加一个新字段:
type Vertex struct { Id string Visited bool AdjEdge []*Edge Prev *Vertex}调整距离时:
if D[edge.Destination] > D[edge.Source]+edge.Weight { D[edge.Destination] = D[edge.Source] + edge.Weight edge.Destination.Prev = edge.Source当您显示结果时:
for vertex1, distance1 := range distmap1 { fmt.Println(vertex1.Id, "=", distance1) if vertex1.Prev != nil { fmt.Println (vertex1.Id, " -> ", vertex1.Prev.Id) }}


