首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lemon图库C++ - Directed Graph

Lemon图库C++ - Directed Graph
EN

Stack Overflow用户
提问于 2012-08-08 04:14:31
回答 2查看 1.7K关注 0票数 1

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

问题是,我一开始就被困在理解Lemon是如何工作的,他们有一个教程,但没有论坛可问。

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

示例:

代码语言:javascript
复制
     A    B    C
A    0    1    0
B    1    0    5
C    0    0    0

在这种情况下,A连接到权重为1的BC连接到空(因此一旦到达C就卡住了),B连接到值为1的AB连接到值为5的C

本教程建议您这样做:

代码语言:javascript
复制
ListDigraph g;
ListDigraph::Node A = g.addNode();
ListDigraph::Node B = g.addNode();
ListDigraph::Node C = g.addNode();

所以现在我有了一个包含三个节点的图g。这次又是什么?在哪里/如何添加连接性信息以及权重值?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-08 04:21:27

来自Lemon教程

代码语言:javascript
复制
  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);

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

票数 4
EN

Stack Overflow用户

发布于 2016-03-07 11:41:26

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

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

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

您可以使用以下命令找到此标识符:

代码语言:javascript
复制
graph.id(node);

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

要添加边(在无向图中)或弧(在有向图中),只需创建两个节点,然后使用.addEdge(n1, n2).addArc(n1, n2)

例如:

代码语言:javascript
复制
ListDigraph graph;

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

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

并将某个值与该弧相关联:

代码语言:javascript
复制
ArcMap<std::string> arcMap;

arcMap[a] = "This is an arc value!";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11853405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档