【发布时间】:2014-09-02 10:43:29
【问题描述】:
我需要找出二维数组中两个节点之间的最短路径。为此,我想使用 boost 图形库。但是 boost 图形库接受图形作为输入。所以我需要将二维数组转换为图形。我还听说可以为此目的使用用于图形的适配器类矩阵。但是当我经历那件事时,我也无法清楚地理解这一点。我也找不到任何例子。那么谁能给我一个关于如何使用该适配器代码将矩阵转换为图形的示例代码?
谢谢
【问题讨论】:
标签: c++ boost-graph
我需要找出二维数组中两个节点之间的最短路径。为此,我想使用 boost 图形库。但是 boost 图形库接受图形作为输入。所以我需要将二维数组转换为图形。我还听说可以为此目的使用用于图形的适配器类矩阵。但是当我经历那件事时,我也无法清楚地理解这一点。我也找不到任何例子。那么谁能给我一个关于如何使用该适配器代码将矩阵转换为图形的示例代码?
谢谢
【问题讨论】:
标签: c++ boost-graph
查看this 与Extract the adjacency matrix from a BGL graph 的评论中链接的代码。
目前似乎没有比仅迭代矩阵并向图形添加边更简单的方法了。
for(i = 0; i < nrows; ++i)
for(j = 0; j < ncols; ++j) //of course in a graph nrows should equal ncols.
if(matrix[i][j] != 0){
add_edge(i,j,g);
}
如果你有一个 vecS 顶点图(整数顶点描述符)。
matrix adapter 类目前在 boost 中没有记录。在查看了实现和this mailing list post 之后,通过引用nnz 方法(非零元素的数量)来判断,这似乎是为了与boost::numeric::ublas::mapped_matrix 一起工作。
虽然矩阵适配器中没有说明,vector adapter 和 leda adapter 的作者相同:
"该模块需要C++编译器支持partial graph_traits 类的特化,所以这不是可移植的 到 VC++。”
因此,即使您让这些未记录的适配器工作,它们也不会使用 VC++ 进行编译。
您只需要迭代矩阵并手动添加边(据我所知)。
【讨论】: