图表示例:
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(如果存在)。
答案 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;