【问题标题】:Checking the existence of an edge on an undirected graph using Lemon Graph Library使用 Lemon Graph Library 检查无向图上是否存在边
【发布时间】:2013-10-07 18:42:09
【问题描述】:

图表示例:

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 的方法。

【问题讨论】:

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


    【解决方案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;
    

    【讨论】:

      【解决方案2】:

      如果有人(比如我)正在寻找这个,Lemon 有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; 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多