簡體   English   中英

檸檬圖庫C ++ - 有向圖

[英]Lemon Graph Library C++ - Directed Graph

我正在尋找Lemon來處理我的尋路,因為它有搜索和最短路徑算法等等。

問題是,我一開始就已經理解了Lemon的工作方式,並且他們有一個教程,但沒有論壇要問。

我對有向圖的理解是你有一個節點,它可以鏈接或不鏈接到另一個節點,然后你對它有一個權重。

例:

     A    B    C
A    0    1    0
B    1    0    5
C    0    0    0

在這里, A連接到B ,權重為1, C連接到任何東西(所以一旦你到達C就會被卡住), B連接到A ,值為1, B連接到C ,值為5。

教程說要做這樣的事情:

ListDigraph g;
ListDigraph::Node A = g.addNode();
ListDigraph::Node B = g.addNode();
ListDigraph::Node C = g.addNode();

所以現在我有一個帶有三個節點的圖g 怎么辦? 在哪里/如何添加連接信息以及權重值?

來自Lemon教程

  ListDigraph g;

  ListDigraph::Node x = g.addNode();
  ListDigraph::Node y = g.addNode();
  ListDigraph::Node z = g.addNode();

  g.addArc(x,y);
  g.addArc(y,z);
  g.addArc(z,x);

從來沒有使用過這個圖書館的心靈,我只是引用了我所讀過的內容。

LEMON使用的術語與大多數圖論文本略有不同,但在我看來,這使得使用庫變得更容易一些。

首先,LEMON中的邊和弧之間的差異僅僅是邊是兩個節點之間的無向邊,而弧是有邊。


至於添加邊和權重以及諸如此類,圖自身僅管理節點和邊/弧,與每個相關聯的唯一數據是整體標識符。

您可以使用以下命令找到此標識

graph.id(node);

要將數據片段附加到節點/邊緣,請使用貼圖。 有幾種不同類型的地圖,但它們通常歸結為NodeMapEdgeMapArcMap - 正如您可能猜到的,它們是<Node, V><Edge, V><Arc, V>關聯映射<Arc, V> ,分別是V是值類型(可以是具有默認構造函數的任何東西)。


要添加邊(在無向圖中)或弧(在有向圖中),只需創建兩個節點,然后使用.addEdge(n1, n2).addArc(n1, n2)

例如:

ListDigraph graph;

ListDigraph::Node n1 = graph.addNode();
ListDigraph::Node n2 = graph.addNode();

ListDigraph::Arc a = graph.addArc(n1, n2);

並將某個值與該弧相關聯:

ArcMap<std::string> arcMap;

arcMap[a] = "This is an arc value!";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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