1

我正在寻找 Lemon 来处理我的寻路,因为它具有搜索和最短路径算法等。

问题是,我一开始就一直在理解 Lemon 的工作原理,他们有教程但没有论坛可问。

我对有向图的理解是你有一个节点,它可以链接或不链接到另一个节点,然后你对它有一个权重。

例子:

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

在此,AB权重为 1C的连接,与无连接(因此一旦到达,C您就会被卡住),并BA1 的值B连接并C以 5 的值连接。

该教程说要做这样的事情:

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

所以现在我有一个g包含三个节点的图表。怎么办?在哪里/如何添加连接信息以及权重值?

4

2 回答 2

4

来自柠檬教程

  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);

从来没有用过这个图书馆的头脑,我只是引用我读过的东西。

于 2012-08-07T20:21:26.633 回答
0

LEMON 使用的术语与大多数图论文本略有不同,但在我看来,这使得使用该库更容易一些。

首先,LEMON 中边和弧的区别很简单,边是两个节点之间的无向边,而弧是有边。


至于添加边和权重等等,图本身只管理节点和边/弧,与每个相关的唯一数据是一个完整的标识符。

您可以使用以下方法找到此标识符:

graph.id(node);

要将数据片段附加到节点/边缘,您可以使用地图。有几种不同类型的映射,但它们通常归结为NodeMapEdgeMapArcMap- 并且,正如您可能猜到的那样,它们分别是<Node, V><Edge, V>和的关联映射<Arc, V>,其中V值类型(可以是任何具有默认构造函数)。


要添加边(在无向图中)或弧(在有向图中),您只需创建两个节点,然后使用.addEdge(n1, n2)or .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!";
于 2016-03-07T03:41:26.303 回答