我正在使用 OGDF 版本 2012.07。
我有一个 GraphCopy 代表 Graph 实例的副本。在对图副本进行操作时,它保存对原始节点和边的引用。在GraphCopy 的文档中,它说:
支持边分裂的图副本。
类GraphCopy表示图的副本,并维护原始图的节点和边与副本之间的映射,反之亦然。
[...]
有一个方法ogdf::GraphCopy::newEdge(edge eOrig)记录如下:
使用原始边eOrig创建新边 ( v,w ) 。
该方法实现如下:
edge GraphCopy::newEdge(edge eOrig)
{
OGDF_ASSERT(eOrig != 0 && eOrig->graphOf() == m_pGraph);
OGDF_ASSERT(m_eCopy[eOrig].empty()); // no support for edge splitting!
edge e = Graph::newEdge(m_vCopy[eOrig->source()], m_vCopy[eOrig->target()]);
m_eCopy[m_eOrig[e] = eOrig].pushBack(e);
return e;
}
在第二个断言中,原始图中边eOrig的关联边副本的数量必须为零,这仅在删除边副本时才有可能,因为最初(当使用原始图初始化 GraphCopy 时)所有图副本中的边与原始图中对应的原始边相关联;因此,m_eCopy[eOrig].empty()
对于所有边都是错误的。
我应该如何在不更改原始图形的情况下复制图形副本中的边?