Я пытаюсь использовать OGDF для выполнения некоторой обработки на графиках, загруженных из файлов GML. Эти графики имеют смысл только в том случае, если метки узлов поддерживаются. К сожалению, OGDF не упрощает сохранение атрибутов узлов, таких как метки, поскольку они поддерживаются в отдельной структуре данных, называемой GraphAttributes
. Моя проблема заключается в том, что GraphAttributes
связывает метки узлов с узлами индексы, которые не поддерживаются некоторыми преобразованиями графа, которые мне нужно использовать.Ведение GraphAttributes с помощью GraphCopy :: initByCC в OGDF
Одним из преобразований, которые мне нужно выполнить на графиках, является разделение каждого подключенного подграфа в файле 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());
Аналогичен, OG обеспечивают 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
, чтобы я мог получить правильные метки для узлов в скопированном подключенном подграфе?
Тег [tag: gml] предназначен для языка Game Maker, а не для географического разметки. – PGmath