vertex
'un vertex
başlangıç noktasından en kısa mesafeye sahip olduğu en yüksek önceliği priority queue
kullanmalısınız. İlk olarak, tüm vertices
sonsuz kısa mesafeyi ve PQ
içinde grafikten (onun edges
) tüm vertices
arasında sokulmasıyla vertex
başlangıç en kısa mesafe olacak 0
Başlangıç olacaktır. vertex
'u PQ
numaralı telefondan çıkarın ve edges
kodlarını keşfedin. Bitişikteki tüm vertices
ile en kısa mesafeleri karşılaştırın ve herhangi bir mesafe geçerli vertex
üzerinde en kısa mesafeden daha azsa, PQ
içinde en kısa mesafeyi bitişik vertex
güncelleştirin. Devam PQ
boş değil. edges
numarasına sahip olmayan Vertices
, vertex
başından itibaren 'onlara ulaşma' mümkün olmadığından en kısa sonsuzluk mesafesini bitirecektir. Ancak, yine de PQ
'dan kaldırılacaklar.
yalancı kod
initialize graph
initialize pq
pq.insertAll(graph.getVertices())
while (pq is not empty) {
vertex = pq.remove()
edges = vertex.getEdges()
for all edges {
destination = edge.getDestination()
newDistance = edge.getLength() + vertex.getDistance()
if (newDistance < destination.getDistance()) {
destination.setShortestDistance(newDistance)
pq.update(destination)
}
}
}
MIT Açık Ders Malzemeleri Bağlantılar:
Path problems overview
Dijkstra
Eğer Dijkstra'nın olarak düşünürseniz "ağırlıklı grafikler için Genişlik öncelikli arama," Bu oldukça kolay hale gelir anlama. Sorularınızı cevaplamak için: 1. Tam olarak değil - burası en uzak ** olan kenarlardan minimum **. 2. BFS ile olduğu gibi, ziyaret edilen bir düğümün bitişiğinde değilse, o zaman henüz ziyaret edilemez. Ziyaret edilen bir düğümden * ulaşılamıyorsa, hiç ziyaret edilmez. –