【问题标题】:Lemon Graph Library C++ - Directed GraphLemon Graph Library C++ - 有向图
【发布时间】:2012-08-07 20:14:30
【问题描述】:

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

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

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

例子:

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

在此,A 连接到 B,权重为 1,C 没有连接(所以一旦你到达 C,你就卡住了),B 连接到 @987654327值为 1 的 @ 和 B 连接到值为 5 的 C

教程说要做这样的事情:

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

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

【问题讨论】:

    标签: c++ path-finding directed-graph lemon-graph-library


    【解决方案1】:

    来自柠檬教程

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

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

    【讨论】:

    • 是的,我读过这个..在我的问题中,我有你写的代码..但这如何回答我的问题?
    • 您的第一个问题是“我如何添加连接信息”。它在我的答案中,最后三行,它不在您引用的代码中。
    • 我也不知道这个库。但是,您询问了如何将连接信息添加到图表中。看起来这个方法“addArc”就是这样做的——除了没有重量。
    • 哦,我以为这是某种曲线...所以这是说 X 连接到 Y,Y 连接到 Z,Z 连接到 X...?所以在我的例子中......它会是 g.addArc(a,b), (b,a), (b,c).. 对吗?但是仍然没有看到关于权重的信息?
    • 似乎重量,您必须使用称为 ArcMap 的数据结构。但正如我所说,没有使用过这个库的经验。
    【解决方案2】:

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

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


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

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

    graph.id(node);
    

    要将数据片段附加到节点/边,您可以使用地图。有几种不同类型的映射,但它们通常归结为 NodeMapEdgeMapArcMap - 而且,正如您可能猜到的那样,它们是 <Node, V><Edge, V> 和 @ 的关联映射987654327@,其中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!";
    

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多