Öncelikle Dijkstra algoritmasını tanımlayalım:
Dijkstra'nın algoritması, negatif olmayan kenar ağırlıklarına sahip yönlendirilmiş bir grafikte tek kaynak en kısa yolları bulur.
Dijkstra algoritması ile en kısa yol formunu t'ye nasıl kaydedebilirim bilmek istiyorum.
Google'da arama yaptım, ancak özel bir şey bulamadım; Ayrıca Dijkstra algoritmasını da değiştirdim, ama herhangi bir cevap alamadım. Dijkstra ile s arasındaki en kısa yolu nasıl kaydedebilirim?
Sorunun temel ve profesyonelce olmadığını biliyorum, ancak herhangi bir yardım takdir edilecektir. Sorumu düşündüğün için teşekkürler.dijkstra algoritmasında en kısa yol nasıl kaydedilir
cevap
listesini depolamak her bir düğüme bir attrribute shortestPathToNode
ver. Bu dizi, her bir düğümde grafikte v için, önceki düğümü kaynak düğüm s ve v arasındaki en kısa yolu u içerir. (. Bu dizi de önceki veya üst dizi olarak adlandırılır), diğer bir deyişle
, s ve v arasındaki en kısa yolu: s ile
s -> u -> v
where u = prev[v]
yolu - to, aralarında birkaç düğüm olabilir, bu nedenle s - yolunu yeniden oluşturmak için v, sadece ana yalancı kod aşağıdaki kod parçacığını kullanarak prev[]
dizisi tarafından tanımlanan yol boyunca geri yürümek (hedefev olan): bunu
1 S ← empty sequence
2 u ← target
3 while prev[u] is defined: // Construct the shortest path with a stack S
4 insert u at the beginning of S // Push the vertex onto the stack
5 u ← prev[u] // Traverse from target to source
6 end while
Bu algoritmayı kullanan çoğu kitaplık, bunu yapmanın bir yolunu gösterecektir. Ancak genel olarak her bir düğüme giden yolu takip edin. Yani hangi size verdi Vikipedi bağlantısından pseudocode bakarsak, sen prev[]
denilen orada bir dizi göreceksiniz düğümler
Bir son derece kısa yolu Özyinelemeyi kullanmaktır ve bir "ana dizi". Tüm noktaların ebeveynlerini -1 olarak başlatırsanız ve daha sonra dijkstra'ları tamamladıktan sonra ana diziyi güncellerseniz, kaynağa ulaşıncaya ve yolu yazdırıncaya kadar herhangi bir noktadan geri dönebilirsiniz. (Bu C ilişkisi olmadığını diller için veya başka bir veri türü) yerine dışarı baskı "j", bir küresel vektör içinde saklayabilirsiniz
// Function to print shortest path from source to j using parent array
void path(parent array, int j)
{
// Base Case : If j is source
if (jth element of parent is -1) return;
path(parent, jth element of parent);
print j;
}
Not: Burada tekrarlama pasajını anlamak için çok kısa ve kolay Daha sonra kullanmak için.
- 1. Dijkstra en kısa yol algoritması kenar maliyeti
- 2. JUnit Test Örneği Dijkstra Algoritmasında Özel Yöntemle
- 3. Networkx - En kısa yol uzunluğu
- 4. Sözlükleri kullanarak en kısa yol algoritması [Python]
- 5. En Kısa/En Ucuz Yol? Dinamik programlama nasıl kullanılır?
- 6. Boost dijkstra shortest_path - sadece mesafeyi değil, en kısa yolu nasıl elde edersiniz?
- 7. Bir Uçuş Yolunda En Kısa Yol Nasıl Gidilir?-Tablo
- 8. Özel şartlar altında en kısa yol masrafı nasıl bulunur?
- 9. Haskell'de Dijkstra Algoritması Nasıl Uygulanır
- 10. Diziyi bir dizgeye dönüştürmek için en kısa yol C#/LINQ
- 11. Kenar ağırlıkları iki katına çıkarıldıktan sonra en kısa yol
- 12. Android en kısa yol/mesafe bulmak için herhangi bir algoritma?
- 13. En etkili yol
- 14. Dijkstra doğru yolu bulamıyor
- 15. JTable nasıl en kısa şekilde sıralanır?
- 16. Javascript dizeleri çoğaltmak için kısa yol yolu
- 17. Grafikte en kısa yolların sayısı
- 18. k düğümleri ile Dijkstra varyantı?
- 19. Yineleme algoritmasında karmaşıklık
- 20. Floyd-Warshall kullanarak tüm en kısa yolları ve mesafeleri bulma
- 21. En kısa eşleşme kuralını esnek olarak nasıl etkinleştirirsiniz (lexer)?
- 22. En kısa satır içi koleksiyon başlatıcısı? C#
- 23. OSRM ile tek kaynak en kısa yolları nasıl hesaplanır?
- 24. Köşeleri igraf'ı kullanarak en kısa yoldan nasıl alabilirim?
- 25. kısa + kısa! = Kısa?
- 26. R algoritmasında sonuçların nasıl yazılacağını R?
- 27. En iyi yol C#
- 28. en iyi yol?
- 29. Grid Üzerinde En Kısa Rota Hesapla
- 30. OrientDB'nin en kısa yolunu ziyaret edinPath()