gpt4 book ai didi

c++ - 在OGDF中使用GraphCopy::initByCC维护GraphAttributes

转载 作者:行者123 更新时间:2023-12-03 07:26:13 26 4
gpt4 key购买 nike

我正在尝试使用OGDF对从GML文件加载的图形执行一些处理。只有维护了节点标签,这些图才有意义。不幸的是,由于OGDF很难将节点属性(如标签)保留下来,因为它们是在称为GraphAttributes的单独数据结构中维护的。我的问题是GraphAttributes将节点标签与节点索引相关联,而我需要使用的某些图形转换无法维护这些节点索引。

我需要在图上执行的转换之一是将GML文件中的每个连接的子图拆分。加载图及其节点标签很简单:

ogdf::Graph graph;
ogdf::GraphAttributes attributes(graph, ogdf::GraphAttributes::nodeLabel);
ogdf::GraphIO::readGML(attributes, graph, FILENAME);

// this gives the correct label of the first node in the graph
attributes.label(graph.firstNode());

同样,OGDF提供 CCsInfo类来查找图的连接子图。由于我想独立使用这些子图,因此我使用 GraphCopy::initByCC方法创建单独的 Graph实例。
ogdf::CCsInfo info(graph);
ogdf::GraphCopy copy(graph);
ogdf::EdgeArray< ogdf::edge > edgeArray(graph);
// where i (int) is the number of the connected subgraph to copy
copy.initByCC(info, i, edgeArray);

// this now gives the wrong label for the first node in copy
attributes.label(copy.firstNode());

这有效,并且 copy仅包含连接的子图的节点和边缘。但是,副本中节点的索引与原始图中的节点的索引不同。这意味着标签到 attributes对象中的节点的映射不适用于 copy中的节点。

有没有一种方法可以对 attributes对象执行相同的转换,以便为复制的连接子图中的节点获取正确的标签?

最佳答案

事实证明,这并不像我想的那么难。我缺少的关键是您可以使用GraphCopy::original方法从原始图形中获取具有索引的节点,然后使用该节点获取标签。

// get the correct label for the first node of the GraphCopy object copy
attributes.label(copy.original(copy.firstNode()));

关于c++ - 在OGDF中使用GraphCopy::initByCC维护GraphAttributes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37728544/

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