【发布时间】:2015-05-19 10:52:03
【问题描述】:
我有一个存储为邻接列表的图形。顶点属性保存一个int ID,边缘属性保存一个4x4矩阵和一个权重;
在测试用例中,该图是一个 3 顶点图,其中一条边连接每对顶点(一个完整的图)。
我有一个边描述符向量PathType,代表一条路径,我正在遍历它并访问每个边及其属性RelationshipEdge,如下所示。
for(PathType::iterator pathIterator = path.begin(); pathIterator != path.end(); ++pathIterator){
edge_t edge = *pathIterator;
RelationshipEdge rEdge = m_graph[edge];
int sourceID = m_graph[boost::source(edge, m_graph)].id;
int destID = m_graph[boost::target(edge, m_graph)].id;
但有时执行此操作时,返回的RelationshipEdge 包含错误边缘的数据。
例如,检查 edge 显示为 1 的 m_source 和 2 的 m_target。如果我检查图形并找到源 1 和目标 2 的边,权重为 3,矩阵为进入。但是 rEdge 的权重为 1,并且矩阵不同。这些值实际上对应于源 0 和目标 1 的边。
我是否正确访问边缘属性?
我的图表类型的定义是:
typedef boost::adjacency_list<
boost::vecS, boost::vecS, boost::undirectedS, MarkerVertex, RelationshipEdge>
CorrelationAdjacencyList;
【问题讨论】:
-
你的图形类型定义在哪里,@Joe(考虑一个 SSCCE,因为你的散文建议你可以用一小组数据重现这个问题)
-
我现在已经添加了。在同一路径中调用其他边时,甚至在不同路径中调用同一边时,我会返回正确的属性。这是我可以创建的一个尽可能小的示例,它仍在测试所有功能。
-
对不起,我的水晶球没有想到它失败的原因。尝试发布 SSCCE
标签: c++ graph boost-graph adjacency-list