Проверка существования ребра на неориентированном графе с использованием библиотеки графов лимонов

Пример графика:

ListDigraph G;

ListGraph::Node A = G.addNode();
ListGraph::Node B = G.addNode();
ListGraph::Node C = G.addNode();
ListGraph::Node D = G.addNode();

ListGraph::Edge AB = G.addEdge(A,B);
ListGraph::Edge AC = G.addEdge(A,C);
ListGraph::Edge AD = G.addEdge(A,D);
ListGraph::Edge BC = G.addEdge(B,C);
ListGraph::Edge BD = G.addEdge(B,C);
ListGraph::Edge CD = G.addEdge(C,D);

Мне нужен метод, который берет 2 узла (A и C), например, и возвращает идентификатор Edge, который соединяет эти 2 узла (если он существует).

0

Решение

Вы можете хранить свои узлы в одномерном массиве, а свои ребра — в двумерном массиве. То есть вместо узлов A, B, C и D есть массив с Nodes[0] через Nodes[3], Тогда ребро AB может быть сохранено как Edge[0][1], Вы просто храните ребра как матрицу смежности. Затем вы можете найти идентификатор ребер, используя этот вызов: G.id(Edge[0][1]), Если вы хотите проверить, существует ли ребро между этими двумя узлами, вам просто нужно проверить, что абсолютное значение идентификатора ребра меньше, чем общее число ребер:

if (abs(G.id(Edge[0][1])) < numberOfEdges)
return true;
else
return false;
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]