gpt4 book ai didi

c++ - 在 ogdf::GraphCopy 中复制一条边

转载 作者:行者123 更新时间:2023-11-28 07:59:34 25 4
gpt4 key购买 nike

我使用的是 OGDF 2012.07 版。

我有一个 GraphCopy,它表示 Graph 实例的拷贝。在对图形拷贝进行操作时,它会保存对原始节点和边的引用。在documentation of GraphCopy ,它说:

Copies of graphs supporting edge splitting.

The class GraphCopy represents a copy of a graph and maintains a mapping between the nodes and edges of the original graph to the copy and vice versa.

[...]

有一个方法ogdf::GraphCopy::newEdge(edge eOrig)记录如下:

Creates a new edge (v,w) with original edge eOrig.

方法实现如下:

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() 对所有边都是假的。

我应该如何在不更改原始图形的情况下复制图形拷贝中的边

最佳答案

我无法理解您对实现的解释。当我浏览源代码时 GraphCopy.h在 OGDF 网站上(上面写着 2012.07.),我看到了完全不同的类(class)。有一个类 GraphCopy(它是支持边分割的派生 GraphCopy 类的接口(interface))和另一个不支持边分割的类 GraphCopySimple

所以我的建议是检查您是否真的拥有正确的版本。

GraphCopySimple 中的方法 newEdge(edge eOrig) 看起来就像您想要的那样:

edge newEdge(edge eOrig) {
OGDF_ASSERT(eOrig != 0 && eOrig->graphOf() == m_pGraph);
edge e = Graph::newEdge(m_vCopy[eOrig->source()], m_vCopy[eOrig->target()]);
m_eCopy[m_eOrig[e] = eOrig] = e;
return e;
}

但是还有一个问题。 GraphCopySimple 没有构造函数的实现,所以我猜它意味着抽象基类,因此您需要派生自己的 GraphCopy 类并实现缺少的函数。

关于c++ - 在 ogdf::GraphCopy 中复制一条边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11865847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com