Пример графика:
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 узла (если он существует).
Вы можете хранить свои узлы в одномерном массиве, а свои ребра — в двумерном массиве. То есть вместо узлов 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;
Других решений пока нет …