2014-12-11 92 views
1

我試圖實現使用增強的圖形有三個不同的載體矢量圖形:實現使用升壓

std::vector<std::string> vertex_array; 
std::vector<Edge> edge_array; 
std::vector<int> weight_array; 

邊緣被定義爲:

typedef std::pair<std::string, std::string> Edge; 

和我的圖被定義爲:

typedef adjacency_list<vecS, vecS, undirectedS> Graph; 

的陣列都填充有我從輸入文件得到的數據,所以在所述第一元件頂點向量將是類似於「A」的東西,邊緣向量中的第一個元素將是類似於(B,C)的東西,並且權重向量中的第一個元素將是邊緣向量中的第一個邊的權重,或BC這個案例。

問題是,我不是很流利的C++,而我也是新的提升和圖形。我試着在boost網站上查看示例代碼,但他們都使用數組而不是向量。我沒有嘗試這個例子代碼:

Graph g(edge_array, edge_array + sizeof(edge_array)/sizeof(Edge), num_vertices); 

和我有一個爲num_vertices變量,但它仍然是給我的錯誤。

有誰知道如何創建一個邊緣,頂點和權重的矢量圖,我最終能夠使用Dijkstra的增強版?

對不起,如果這個問題確實是模糊或基本的,我真的不知道使用boost和實現圖的任何事情。

+0

嘗試'圖G(edge_array [0],&edge_array [0] + edge_array.size(),爲num_vertices);' – 2014-12-11 03:04:43

+0

@MattMcNabb它擺脫了紅色波浪線,但它給我的編譯器錯誤C2182:非法使用類型'void' – user3543260 2014-12-11 03:44:26

回答

1

docs

類型Graph必須頂點列表和圖表發病圖表的典範。

an example too使用的adjacency_list圖。

當您樣品中vecS取代listS,完全相同的響應返回(我沒有檢查所有的代碼,這種變化的理智雖然)


typedef adjacency_list<vecS, vecS, undirectedS> Graph; 

從這一行就似乎邊上沒有weight屬性。對於Dijkstra來說,選擇沒有這些信息的最佳路徑會變得困難。從快速瀏覽文檔,我認爲你可以提供一個外部的weight地圖。另請注意:

當所有邊權重等於1時,使用廣度優先搜索而不是Dijkstra算法。