程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了开始,Dijkstra:打印出路径,而不仅仅是计算最短距离大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

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

开发过程中遇到开始,Dijkstra:打印出路径,而不仅仅是计算最短距离的问题如何解决?下面主要结合日常开发的经验,给出你关于开始,Dijkstra:打印出路径,而不仅仅是计算最短距离的解决方法建议,希望对你解决开始,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)
    }
}

解决方法

去吧,Dijkstra:打印出路径,而不仅仅是计算最短的距离。

http://play.golang.org/p/A2jnzKcbWD

我使用Dijkstra算法能够找到最短的距离,也许不是。可以在这里找到代码。

但是,如果我无法打印出路径,那将毫无用处。随着大量指针的出现,我无法弄清楚如何打印出权重最少的最终路径。

简而言之,我不仅要找到最短的距离,还要在给定的代码上打印出最短的路径?

链接在这里:

http://play.golang.org/p/A2jnzKcbWD

代码片段如下:

const MAXWEIGHT = 1000000

type MinDistanceFromsource map[*Vertex]int

func (G *Graph) Dijks(Startsource,Targetsource *VerteX) MinDistanceFromsource {
  D := make(MinDistanceFromsourcE)
  for _,vertex := range G.VertexArray {
    D[vertex] = MAXWEIGHT
  }
  D[Startsource] = 0

  for edge := range Startsource.GetAdEdg() {
    D[edge.DesTination] = edge.Weight
  }
  CalculateD(Startsource,Targetsource,D)
  return D
}

func CalculateD(Startsource,Targetsource *Vertex,D MinDistanceFromsourcE) {
  for edge := range Startsource.GetAdEdg() {
    if D[edge.DesTination] > D[edge.source]+edge.Weight {
      D[edge.DesTination] = D[edge.source] + edge.Weight
    } else if D[edge.DesTination] < D[edge.source]+edge.Weight {
      conTinue
    }
    CalculateD(edge.DesTination,D)
  }
}

我对数组做了一些操作,以查看正在更新的内容。

http://play.golang.org/p/bRXYjnIGxy

这给ms

   [A->D D->E E->F F->T B->E E->D E->F F->T]

大佬总结

以上是大佬教程为你收集整理的开始,Dijkstra:打印出路径,而不仅仅是计算最短距离全部内容,希望文章能够帮你解决开始,Dijkstra:打印出路径,而不仅仅是计算最短距离所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。