繁体   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