使用Lemon Graph Library检查无向图上是否存在边

时间:2013-10-07 18:42:09

标签: c++ graph lemon-graph-library

图表示例:

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)为例的方法,并返回连接这2个节点的Edge的ID(如果存在)。

2 个答案:

答案 0 :(得分:1)

您可以将节点存储在一维数组中,将边缘存储在二维数组中。也就是说,不是让节点A,B,C和D具有Nodes[0]Nodes[3]的数组。然后边缘AB可以存储为Edge[0][1]。您只是将边缘存储为邻接矩阵。然后,您可以使用此调用找到边缘的ID:G.id(Edge[0][1])。如果要验证这两个节点之间是否存在边缘,则只需检查边缘ID的绝对值是否小于边缘总数:

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

答案 1 :(得分:0)

万一有人(像我一样)在寻找这个,柠檬有findEdge()。您可以这样做:

ListGraph G;
ListGraph::Node A = G.addNode();
ListGraph::Node B = G.addNode();
ListGraph::Node C = G.addNode();
ListGraph::Edge AB = G.addEdge(A, B);
ListGraph::Edge BC = G.addEdge(B, C);

ListGraph::Edge FoundEdge = findEdge(G,A,B); // edge
// print existence:
cout << "Does edge A-B exist? " 
     << (FoundEdge!=INVALID ? "yes" : "no") 
     << endl;