我正在寻找Lemon来处理我的寻路,因为它有搜索和最短路径算法等等。
问题是,我一开始就理解柠檬是如何工作的,并且他们有一个教程,但没有论坛要求。
我对有向图的理解是你有一个节点,它可以链接或不链接到另一个节点,然后你对它有一个权重。
示例:
A B C
A 0 1 0
B 1 0 5
C 0 0 0
在此,A
与权重为1的B
相关联,C
与任何内容无关(所以一旦到达C
,您就会被卡住), B
与值{1}连接A
,B
连接C
,值为5。
教程说要做这样的事情:
ListDigraph g;
ListDigraph::Node A = g.addNode();
ListDigraph::Node B = g.addNode();
ListDigraph::Node C = g.addNode();
所以现在我有一个带有三个节点的图g
。怎么办?在哪里/如何添加连接信息以及权重值?
答案 0 :(得分:4)
来自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);
从未使用过这个库,我只是引用了我所读过的内容。
答案 1 :(得分:0)
LEMON使用的术语与大多数图形理论文本略有不同,但在我看来,这使得使用库变得容易一些。
首先,LEMON中边和弧的区别仅在于边是两个节点之间的无向边,而弧是定向边。
至于添加边和权重等等,图表本身只管理节点和边/弧,与每个相关联的唯一数据是一个完整的标识符。
您可以使用以下命令找到此标识符:
graph.id(node);
要将数据片段附加到节点/边缘,请使用贴图。有几种不同类型的地图,但它们通常归结为NodeMap
,EdgeMap
或ArcMap
- 正如您可能猜到的那样,它们是{{1}的关联地图分别是<Node, V>
和<Edge, 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);