我有一个顶点和边的表,并从这些表中创建了一个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 –