Go, Dijkstra : 最短距離を計算するだけでなく、パスを出力します。
http://play.golang.org/p/A2jnzKcbWD
ダイクストラ アルゴリズムを使用して最短距離を見つけることができました。コードはここにあります。
しかし、パスを出力できなければ意味がありません。多くのポインターが進行中であるため、重みが最小になる最終的なパスを出力する方法がわかりません。
要するに、最短距離を見つけるだけでなく、この特定のコードで最短経路を出力するにはどうすればよいですか?
リンクはこちら:
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, TargetSource, D)
}
}
何が更新されているかを確認するために、配列で何かをしました。
http://play.golang.org/p/bRXYjnIGxy
これによりmsが得られます
[A->D D->E E->F F->T B->E E->D E->F F->T]