簡體   English   中英

使用Lemon Graph Library檢查無向圖上邊緣的存在

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM