2011-04-18 93 views
2

我正在使用Boost圖。我的圖的邊緣有一個直接的含義。那就是爲什麼我選擇了一個有向圖。但是當我遍歷圖時,我通常會忽略這個方向。然而,我還沒有找到一個解決方案來遍歷我的圖形,例如使用內置深度優先搜索。Boost圖無向遍歷有向圖

有沒有解決方案,這不涉及複製整個圖形?

如果沒有:我不確定我的圖是否實際上是由自然導向的。也許我應該使用無向圖,並添加一些「方向」屬性?我不知道如何做到這一點(只要將源/目標vertex_descriptors附加到邊緣,顯然會在圖形發生變化時斷開)。有沒有可能做到這一點?它有意義嗎?

謝謝

+0

我不知道Boost Graphs的實現。你能否描述一下你原來的任務? – Elalfer 2011-04-18 13:27:44

+0

基本上,我有節點,代表三維空間中的位置。現在從節點A到節點B的邊連接了一個從座標系A轉換到B的變換矩陣。我的算法對該圖的節點位置進行了一些優化。作爲一個預處理步驟,我需要使用BFS/DFS /任意遍歷圖並計算一些東西 - 而且我不在乎方向。 – Dtag 2011-04-18 13:36:19

回答

0

我不知道Boost Graphs的實現,但我可以在你的案例中看到兩個選項。

  1. 如果你的圖形不是很大,那麼你可以先創建一個非有向圖,然後計算你的「東西」,然後創建一個定向副本。這應該花費O(n)時間並且不會影響整體性能。
  2. 使用非有向圖並添加一些關於邊的方向的信息,如指向源頂點的指針。這個解決方案可能會讓你的算法變得更加複雜一些,但是你可以避免任何數據拷貝,並在大圖上獲得一些性能。
+0

感謝您的回覆。嗯,至於1)我基本上同意它的解決方案。然而它的醜陋之處在於,基本上所有算法都可以在沒有這個的情況下執行 - 信息就在那裏。但是我想我必須考慮這個解決方案,如果我找不到其他方法來做到這一點。至於2)我已經在原始問題中提出了這個問題......但問題在於如何在boost圖中執行此操作,因爲您無法在邊緣使用源vertex_descriptor(我知道您寫過您並不熟悉BGL ...也許別人有一個想法在這裏) – Dtag 2011-04-18 17:38:01