柠檬图库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
连接到权重为 1 的B
,C
连接到任何内容(因此一旦你到达C
你就被卡住了),B
连接到值为 1 的A
,B
连接到值为 5 的C
。
本教程说要做这样的事情:
ListDigraph g;
ListDigraph::Node A = g.addNode();
ListDigraph::Node B = g.addNode();
ListDigraph::Node C = g.addNode();
所以现在我有一个包含三个节点的图形g
。现在怎么办?在哪里/如何添加连接信息以及权重值?
来自柠檬教程
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);
要将数据片段附加到节点/边,请使用映射。有几种不同类型的映射,但它们通常归结为NodeMap
、EdgeMap
或ArcMap
- 而且,正如你可能猜到的,它们分别是<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);
并将某个值与该弧相关联:
ArcMap<std::string> arcMap;
arcMap[a] = "This is an arc value!";
相关文章:
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- C++创建指向有向图中节点的指针数组
- 如何仅在 2 个节点之间获取最短路径,给定邻接列表有向图?
- 有向图 - 如何计算图中彼此顶点可到达的顶点数?
- C++计算有向图中的最短路径
- 使用非递归 DFS 检测有向图中的周期
- 如何将这些节点连接为有向图
- 如何使用广度优先搜索确定是否可以在有向图中到达顶点
- 在有向图中精确访问所有节点一次
- 在有向图中查找第二条最短路径
- 关于如何处理有向图的一个想法
- 找到有向图C 的最短路径
- 分析输入文件以创建有向图C++
- 在使用无序多映射实现的有向图中查找循环
- 如何找到在c++中实现的有向图的所有路径作为邻接列表
- 如何创建具有多个数据的节点的有向图
- 有向图中的广度优先搜索
- 查找路径的有向图邻接矩阵
- 从文件构建有向图
- 柠檬图库C++ - 有向图