[英]Checking the existence of an edge on an undirected graph using 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(如果存在)的方法。
您可以將節點存儲在1D數組中,將邊緣存儲在2D數組中。 也就是說,不是讓節點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;
萬一有人(像我一樣)正在尋找這個,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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.