问题标签 [lemon-graph-library]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 当对象需要默认构造函数时,初始化 shared_ptr
为了将 shared_ptr 分配给柠檬图形库中的 Graph 类型变量,我这样做了:
它工作正常,但现在我需要为地图对象声明一个 shared_ptr,通常地图对象的工作方式如下:
也就是说,name 需要一个 Graph 对象作为其默认构造函数。
为了为它声明一个 shared_ptr,我这样做了:
我知道,名称的声明是错误的,但是我如何为其分配内存以及使用进程对象对其进行初始化。
c++ - 使用 Lemon Graph Library 检查无向图上是否存在边
图表示例:
我需要一个以 2 个节点(A 和 C)为例并返回连接这 2 个节点(如果存在)的 Edge 的 ID 的方法。
c++ - Lemon Graph Library C++ 在节点中添加坐标
我有一张包含许多多边形的地图。我想用这些多边形的“中心”进行寻路。所以我尝试使用 Lemon Graph Library 来生成我的图表和 Dijkstra 的算法。
我在柠檬教程中看到:
我的问题是:如何在节点中添加坐标?
喜欢 :
graph - 如何在 Lemon 中使用 GML 文件?
我有很多 GML 格式的拓扑,想用 Lemon ( http://lemon.cs.elte.hu/trac/lemon ) 处理它们,但它不支持 GML 文件。有图书馆吗?
c++ - Lemon Graph Library C++ Map values as function arguments error
我是 C++ 和 Lemon 的绝对新手,我对柠檬图形库有以下问题。我想创建一个函数,将“地图”作为输入变量。像这样的东西:
但是当我尝试构建它时,我收到以下错误:
这是否意味着无法创建具有映射类型参数的函数?
感谢您提供任何帮助!
c++ - 为什么图的 C++ 数据结构隐藏连续的整数索引?
有向图和无向图的数据结构至关重要。Boost Graph Library和Lemon等知名且广泛使用的实现的设计使得节点和边的连续整数索引不会通过接口暴露给用户。
相反,用户通过(小)代表对象来识别节点和边。一个优点是,当节点和边的索引由于从图中删除边或节点而发生变化时,这些对象会自动更新。
在我看来(!),这个优势被高估了。用户通常会将节点和/或边的代表对象存储在容器中,例如std::vector
. 现在,如果从图中删除节点或边并且它们的代表对象变得无效,则用户需要忽略这一点或重新排列向量以保持有效的整数索引连续,即完全按照设计应该做的簿记使不必要的。
因此,我的问题是:设计选择(对用户隐藏节点和边的连续整数索引)是否有其他优势?
c++ - 使用 STL 容器初始化 Lemon Graph Library 中的图
这是 Lemon Tutorial 中的图初始化示例:
可以通过使用带有弧数据的容器来完成相同的操作吗?例如:
编辑
我刚刚发现它可以完成StaticDigraph
,见下文:
可以StaticDigraph
很容易地转换为可修改的图形类型吗?
c++ - 如何在 Lemon Graph Library 中获取索引为 n 的节点?
g
当我使用此代码构建图表时:
它的节点将具有索引 {0..6},我通过调用g.id()
它们进行了测试。如何使用索引获取节点?例如,我想g
通过调用添加一个弧:
c++ - 具有可移动节点、可访问属性和可靠 ID 的 C++ 图
我正在尝试从专有图形库迁移到开源图形库。
编辑:由于似乎很少有人知道 Boost Graph 的实际工作原理,如果您可以使用 LEMON Graph Library 提供解决方案,那也很好。
目前,我的顶点有类型Graph_Vertex*
并且可以有一个关联的void*
指针来存储相关信息。对于类型为 的边,使用了类似的逻辑Graph_Edge*
。我使用void*
指针来存储我自己的结构Node_State
,就像这样
从到目前为止我对 BGL 的了解来看,我可以使用adjacency_list
结构和捆绑属性创建一个图,以指向我的Node_State
. 然后,我将使用整数顶点索引,而不是使用顶点指针。
我一直在看教程和一些问题 ,这似乎是可能的。我正在考虑类似的事情
我会不时删除顶点的所有边。不太频繁,我也可以删除一个节点。这就是为什么我会选择listS, vecS
。
我想让为无向边创建此结构的第二个版本变得容易。我不确定是否bidirectionalS
是我情况的最佳选择。您的意见在这方面表示赞赏。
不过还有一个问题。现在,我可以使用外部映射通过名称或使用唯一整数id来查找每个顶点。
如果我删除一个顶点,我只需要删除地图中的相应条目,事情就会继续工作。
据我了解,使用 BGL 实现这一点并不容易,因为删除一个顶点会触发所有具有更高 ID 的顶点的重新编号,并且还可能导致内部结构的重新分配。所以再见 ids 和再见指针。
主要问题。是否有可能通过最小的调整(例如,仅删除无效键)创建一个map<name, node>
或map<index, node>
可以在节点删除中幸存下来?如果不是,将节点映射到某个唯一标识符的最佳方法是什么?
并保留一些外部结构
这将与我现在拥有的更加相似,并且需要对当前代码进行较少的更改。
我还没有真正理解vertex_index_t
顶点移除是如何影响的,以及如何vertex_name_t
分配。edge_index_t
但是,如果这可行,那么类似的逻辑也可以使用and应用于边缘edge_name_t
。
包起来。我需要一段工作代码来展示如何:
- 添加顶点(带有属性)
- 添加弧(带属性)
- 删除顶点
- 移除弧线
具备这些重要条件:
- 能够按 id(int 或 string)索引顶点,以便轻松检索它们并访问它们的属性
- 如果顶点被移除,ids 不能改变
- 索引和属性的添加不应使“查找连接的组件”和“Dijkstra 搜索”等运行算法变得更加困难
如果我能实现类似的目标,我会很高兴
这可能看起来像很多问题,但实际上只是启动和运行这个库所需的基础。少一点,对我需要做的事情完全没用。
请点击所有要点。
将此视为教程,我希望给予赏金也能帮助其他人。
omnet++ - 如何在 Omnet++ 项目中使用柠檬图库?
我正在尝试在 omnet++ 中设计一个网络(随机图),我想在其中使用 Lemon Graph Library 解析网络节点。我已经安装了该库,如果我尝试使用命令行在任何图形中编译任何带有节点和边的普通 c++ 文件,它工作正常g++ -o file file.cpp/cc -lemon
。但是当我用我的一个 omnet++ 项目(现在什么都没有)尝试它时,代码如下
包含标题在尖括号中(不要与双引号混淆)。因此,当我构建代码时,出现以下错误:
为什么 Omnet++ 代码与 Lemon 图形库不兼容?