问题标签 [boost-graph]
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++ - BGL:如何有效地存储 edge_descriptors 和 vertex_descriptors?
因此,在解决了我与 BGL 的循环依赖问题后,我遇到了另一个障碍。
我目前正在使用邻接列表来建模我的图。节点和边的捆绑属性用于在图中存储一些信息。所以我有这样的事情:
当我想在我的代码中的其他地方存储特定节点和边缘的快捷方式(例如,对于有多个车道的街道)时,就会出现问题。我的第一种方法是将 edge_descriptors 和 vertex_descriptors 保存在我需要的地方。但我想知道这样的描述符会有多大(以字节计)。也许有更好的解决方案,例如只存储一小部分信息以获得相同的结果。
有谁知道用于这种类型的向量的内存量:
我已经考虑过只存储指向 edge_descriptors 的指针,但我不知道这是否以及如何工作。
///////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// ///////////////
编辑:既然我的第一个问题已经得到彻底回答,我仍然想知道一件事。我想为我的图形类构建某种接口。该接口应将图形类详细信息与必须不知道图形详细信息的其他类分开。因此,其他类最好将节点和边识别为数字。所以我想出了两个想法:
- 我使用 hash_map
std::tr1::unordered_map<int, edge_descriptor>
能够将数字转换为描述符,然后再将其用作我的图形对象的索引。这可能是一步到位 - 如果有足够的节点和边要计算,那么哈希值的计算可能会花费太多时间。这就是为什么我有了第二个想法。 - 图本身应在内部将这些数字转换为边和节点。我知道内部属性和属性映射可以用来实现我的想法。然后,您只需键入以下内容即可访问节点:
boost::property_map<My_Graph, my_prop>::type index = get(my_prop(), G);
但是有没有办法将这些属性映射与我的捆绑属性结合起来?
或者你还有其他我没有想到的想法吗?
dictionary - BGL:如何直接访问节点和边的数据?
我有另一个关于 Boost 图形库的问题,我无法通过谷歌搜索或阅读文档来回答自己。它与我的其他问题没有直接关系,所以我想我最好开始一个新线程。
我有一个具有邻接布局的图,并使用捆绑属性来访问节点和边的数据。为方便起见,我在 Graph 中使用了 typedef。因此,我可以通过键入以下内容来访问存储的数据,例如对于 vertex_descriptor:
现在我想定义一个对数据存储对象的引用,以便能够输入类似的内容:
通过这种或类似的方法,我试图避免对映射值进行不必要的重新计算,该映射值是通过使用[]operator
映射和特定描述符对象访问的。我的顶点和边包含大量数据,因此在某些情况下,我当前的代码会产生许多相同值的重新计算来处理这些数据。这似乎很难看。
有谁知道它是否有可能实现我想要做的事情?
c++ - Boost Graph Library 中的最佳优先搜索
我开始使用 boost 图形库。我需要一个最佳优先搜索,我可以通过零成本使用 astar_search 来实现它。(如果我错了,请纠正我。)
但是,我想知道是否还有另一种可能这样做?如果不考虑成本,算法应该稍微高效一些。
编辑:抱歉描述不清楚。我实际上正在实施潜在的现场搜索,因此我没有与边缘相关的任何成本/权重,而是需要进行最陡下降搜索(这可以克服局部最小值)。
感谢您的任何提示!
c++ - 将 boost::depth_first_search 与访客一起使用
正如标题所暗示的,我正在使用boost::depth_first_search
和使用一个访问者(继承自boost::default_dfs_visitor
)来实现一些算法。
但是,在算法运行期间,我想在访问者中保存一些信息,以便以后查询。但是,在 DFS 完成后,信息会被删除,所以我假设它使用副本。除了对所有私有变量使用指针之外,有没有办法防止这种情况并让 boost 使用我的副本?
c++ - 如果满足某些条件,则沿特定深度停止 boost::depth_first_search
我正在使用BGL来存储我的 DAG。顶点有状态。鉴于其中一个顶点的状态发生变化,我想更新相关顶点。我可以使用 boost::depth_first_search 和自定义访问者来做到这一点。
现在的逻辑是,如果顶点处于特定状态,我不想更新搜索到的顶点及其依赖项。基本上我想控制 dfs 或 bfs 中的顶点排队。在 BGL 中实现这一目标的最佳方法是什么。
谢谢。
c++ - 使用 boost::graph 获取特定边缘
我正在使用boost::graph
,我有两个vertex_descriptor
s。在不迭代所有边缘的情况下,获得它们之间边缘的最快方法是什么?
boost - BGL 捆绑属性 add_edge “无匹配功能”
我创建了一个结构,并将其用作 adjacency_list 的模板参数。但是,当我尝试 add_edge(vertex1, vertex2, property, graph) 时,编译器会抱怨“没有匹配的函数调用”。谁能看到我在这里出错的地方?
谢谢,
大卫
boost - 输出 BGL 边缘权重
我正在尝试遍历图形的边缘并输出它们的边缘权重。不过我很困惑。我知道如何输出“边缘”,但这实际上只是一个定义边缘的 (vertex, vertex)。那么我是否将 *edgePair.first 索引到 EdgeWeightMap 以获取从顶点 *edgePair.first 开始的边的权重?这不会编译:“不匹配运算符<<”。
有什么想法吗?
谢谢,大卫
c++ - How to get port identifiers for an edge using Boost Graph Library?
Using the Boost Graph Library, is it possible to get the port identifiers for an edge?
Example: After calling read_graphviz
, I can iterate through the edges of this graph and print their node_id
s -- I get "A -> B, A -> B". How can I print something like "A:p0 -> B:p1, A:p0 -> B:p2"?