开始,Dijkstra:打印出路径,而不仅仅是计算最短距离

开始,Dijkstra:打印出路径,而不仅仅是计算最短距离,第1张

开始,Dijkstra:打印出路径,而不仅仅是计算最短距离

当您在此处调整新路径距离时

   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)    }}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5126260.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-17
下一篇2022-11-17

发表评论

登录后才能评论

评论列表(0条)

    保存