我有一個頂點和邊的表,並從這些表中創建了一個Boost圖。每個頂點邊都有它的ID分配給它,而邊也包含長度。現在我想通過刪除節點來修剪圖。我的算法是通過創建一個num_vertices矩陣完成的。我的問題是如何將我的矩陣與boost :: vertices關聯起來,那就是我怎麼知道哪個矩陣列對應於圖中的我的頂點,因爲矩陣沒有id。希望我沒有想太複雜。Boost從其創建的矩陣中識別頂點的圖形
void Nodekiller::build_matrix(){
int ndsize=num_vertices(graph);
double matrixtb[ndsize][ndsize];
for(int i=0; i<ndsize;i++){
for (int j=0;j<ndsize; j++){
if(i==j) {matrixtb[i][j]=0;}
else {
matrixtb[i][j]=addEdgeValue(); //if none add random value
}
}
}
}
//i want to to sum each column and then prioritize them based on the values gotten.
所以我不知道如何將boost :: vertices(graph)與其他矩陣關聯起來以修剪圖形。
也許我沒有把問題放在正確的位置,第一件事就是我有一個帶有邊和節點的提升圖。從這張圖中,我必須修剪圖中的節點。我可以使用的算法是基於行進時間矩陣,而對角線始終爲零,因爲沒有從節點A行進到A的值。我的問題是,如果我創建一個大小爲n的矩陣並計算每個單元的矩陣,根據算法得到每個節點的值,我怎麼從boost圖中識別節點,因爲沒有id進入矩陣表。 – festy
好吧,在我的例子中,你也可以刪除在單個節點上循環的邊緣;) 否則,如果你堅持讓你的圖表代表兩次,'typedef boost :: graph_traits :: vertex_descriptor vertex_t;'實際上是一個簡單的整數,所以你可以使用作爲一個ID。 您可能還想看看boost :: graph的矩陣表示:http://www.boost.org/doc/libs/1_58_0/libs/graph/doc/adjacency_matrix.html –