大佬教程收集整理的这篇文章主要介绍了开始,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,请注明来意。