我使用了一個adjacency_list圖,具有無向和不加權的邊。我需要找到頂點u和頂點v之間的最短路徑。 我應該從u開始使用breadth_first_search()嗎?到達v時,如何獲得路徑,以及如何停止搜索?使用Boost的圖breadth_first_search()在未加權的無向圖中查找路徑
謝謝!
我使用了一個adjacency_list圖,具有無向和不加權的邊。我需要找到頂點u和頂點v之間的最短路徑。 我應該從u開始使用breadth_first_search()嗎?到達v時,如何獲得路徑,以及如何停止搜索?使用Boost的圖breadth_first_search()在未加權的無向圖中查找路徑
謝謝!
您應該使用最短路徑算法之一Dijkstra Shortest Path是最合適的,因爲您需要在兩個頂點之間找到路徑。有一個example在助推發行中的使用。有幾種方法可以獲得該功能的輸出:通過提供距離屬性圖或構建前驅圖或編寫自定義訪問者。
您需要使用minimum spanning tree:搜索算法。這是一個非常簡單直接的貪婪算法。
是的,從u開始執行breadth_first_search()。
FOR every vertex i meet
IF i==v: BREAK
record predecessor of i as i.p
找到最短路徑,從V開始:
PRINT_PATH(u, v)
IF v==u
print u
ELSEIF v.p==NIL
print 'no path from u to v exists'
ELSE PRINT_PATH(u, v.p)
print v
也許這將有助於上手:http://stackoverflow.com/questions/14126/how-to-create-ac -boost-undirected-graph-and-traverse-it-in-depth-first-search – Frank 2009-02-24 16:05:09