问题标签 [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++ - 在类模板外部或内部定义的结构
我定义了一个简单的模板类。在这个类中,我定义了一个用于图节点的结构(struct NodeData)。对于我在下面给出的第一个代码,即使我在方法测试中故意犯了错误,也没有编译错误(g[nId].anything = "something"
即使 struct NodeData 没有名为任何变量的变量)。
为了理解问题出在哪里,在下面给出的第二个代码中,我将结构定义和 typedef 放在了 MyClass 之外。我已经把template<typename T1, typename T2>
结构 NodeData 的定义放在了上面,因为这个结构需要存储 2 个抽象类型 T1 和 T2 的变量。我还typename
从 typedefs 中删除了关键字,并且我在第一个 typedef 中放置NodeData<int, int>
了而不是NodeData
(即使我实际上不想这样做),否则它会在这一行出现一些错误,例如:expected a type, got 'NodeData'
. 当我编译时,它给出了以下预期的错误(这实际上是完全正常的):,'struct NodeData<int, int>' has no member named 'anything'
而对于第一个代码我没有得到这个错误!
这两个代码有什么区别?如何使第二个代码不必为第一个 typedef 指定 NodeData(因为 struct NodeData 的成员 var1 和 var2 不一定是 int 类型)?或者我怎样才能让第一个代码正常工作并检测 NodeData has no member named 的错误anything
?
第一个代码:
第二个代码:
c++ - 如何遍历有向图中的所有边并获取源+目标
我在有向图中添加了一堆节点和顶点,使用设置 typedef 创建boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, Node, Edge> graph;
Node
有一个字符串作为节点的名称,并Edge
有一个 int 作为它的分数。我正在尝试遍历所有边缘并输出源名称和目标名称,以及该边缘的分数。
您可以使用 获取边缘上的迭代器,该迭代器my_graph.m_edges.begin()
可以取消引用以获取m_source
和m_target
。
如何获得分配给源节点和目标节点的名称,以及该边缘上的分数?
boost - BGL edge(u, v, g) 与边缘列表的自定义关联容器
我刚刚开始学习 bgl,并且在使用具有自定义排序的 std::set 作为 adjacency_list 中边缘列表的容器时遇到了问题。我定义 operator< 以根据边缘的属性对边缘进行排序,就像在 ordered_out_edges.cpp 示例中一样。这里 boost::edge_unique_ordering 是一个自定义属性标签。
一般来说它工作正常,但是当我使用 edge(u, v, g) 函数时,我得到了迭代器异常。如果我用解决方法替换这些调用以避免(源,目标)请求边缘,那么一切正常。
我查看了 boost 代码,我很确定我知道原因是什么,我只是不确定这是否意味着我做错了什么,这是 boost 代码的问题,或者只是一个未记录的不兼容性。该函数在 u 的外边列表容器上调用 set::find(StoredEdge(v))。现在默认的 stored_edge::operator< 只是比较目标顶点,但在我的情况下,我的自定义 operator< 被调用,并且正在寻找的 StoredEdge(v) 显然是默认初始化的,没有属性,这可能是导致问题。在我看来, edge(u, v, g) 应该严格根据目标顶点搜索任何匹配项,而不管容器内的边缘采用什么顺序。
任何人都可以阐明我可能做错了什么或不理解吗?
c++ - 将图 (adjacency_list) 复制到另一个
如何将 adjacency_list 类型的图复制到 adjacency_list 类型的另一个图?
visual-studio-2010 - 在 msvc 2010 中构建 boost MPI 时出错
我已经在 C:\Program Files\OpenMPI_v1.5.4-win32\ 中安装了 openmpi,并希望编译 boost 以生成图形并行库。但出现以下错误:
当我在 Visual Studio 2010 命令提示符下运行时:
我在 boost_1_48_0\tools\build\v2\user-config.jam 中添加了 MPI 配置,如下所示:
我相信以前有人问过这个类似的问题,但没有得到答案:
如何使用 Visual Studio 2010 在 Windows 上使用 Open MPI 构建 boost::mpi 库
c++ - BGL 的运行时测试
BGL 为他们的图概念提供了概念检查,似乎标题boost/graph/graph_test.hpp
为给定的概念提供了某种运行时检查,但它UNDER CONSTRUCTION
从 2002 年开始就有这种可怕的东西。
是否有其他适用于 BGL 的运行时测试套件,或者是否可以安全使用(以及如何使用)graph_test.hpp
?
boost - 使用boost图库检测无向图中的循环
从昨天开始我就被这个问题困住了。不幸/幸运的是,这个问题只占我的超级巨大(对我来说,一个 c++ 新手)算法的 0.5%,因此需要一个现有代码库,一个人可以适应并让事情正常工作。
我想检测并给出无向图中的所有圆圈。我的边缘没有加权。是的,我真正需要的是所有循环,即类似于有向图的所有哈密顿循环
我一直在玩 boost 图形库,DFS 算法似乎很有前途,但是,它只访问顶点一次,因此不能给出所有的哈密顿圆。
目前,我只需要代码工作,这样我就可以继续我的算法设计,之后我可能会考虑性能问题。甚至欢迎使用 5 嵌套 for 循环的解决方案。
这是我从 boost 中获得并使用的代码,但我不知道如何记录和访问我的 back_edges 前辈,即使解决了,boost DFS 也只会访问一次顶点:
上面的例子说通常只有 3 个循环,我预计会超过 4 个,单个顶点可能会出现在多个循环中。其次,我什至无法back_edge()
像这样访问 boost 给我的所有三个周期std::vector<uInt32> fCycle1, fCycle2,fCycle3
。我得到back_edge()
的只是源顶点和目标顶点。
我将不胜感激任何帮助和提示。到目前为止,这里的所有示例都只是检测循环的存在或其数量,但没有一个示例显示如何列出所有存在的循环。
c++ - 使用 write_graphviz() 打印一个 constified 子图
我正在努力将图表转储到流中,其中所述图表是boost::subgraph
.
我尝试提供一个属性编写器,但基本上它失败了,因为它似乎需要一个方法boost::get(PropertyWriter, VertexDescriptor)
。在图表不subgraph
符合预期的情况下使用相同的方法。
如发现here,我必须使用a boost::dynamic_properties
(见下面的代码),但当我的图表不可写时它会失败(而文档表明该图表被视为一个约束参考)。
这是一个我无法开始工作的简单示例:
欢迎任何提示!非常感谢,
编辑
我忘了提及在我的案例中“失败”是什么意思;这是我尝试编译时的错误:
错误:将 'const std::basic_string' 作为 'std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(const std::basic_string <_CharT, _Traits, _Alloc>&) [with _CharT = char, _Traits = std::char_traits, _Alloc = std::allocator, std::basic_string<_CharT, _Traits, _Alloc> = std::basic_string]' 丢弃限定符 [ -fpermissive]
boost-graph - LEDA 图形 v/s Boost 图形库
我想要效率,如果效率(=0.9*speed + 0.1*others)高,我愿意自己写代码。如果我要在 LEDA 图或 Boost 图之间进行选择,我应该选择哪一个?
我的算法很耗时(有些甚至是时间上的非多项式),适用于大图。
c++ - Boost:: Dijkstra Shortest Path,如何从路径迭代器中获取顶点索引?
在你开始阅读之前,为了帮助你理解我的问题,我告诉你我已经从这个链接复制了代码:Dijkstra Shortest Path with VertexList = ListS in boost graph
所以..我正在重写我的程序代码以使用 boost,但现在当 99% 准备好时,我被我的 GPS 卡住了(用于游戏)。我有一个节点列表,幸运的是,我以一种很容易转换为 boost 方法的方式添加了这些节点。我需要做的就是创建一个这样的顶点变量:
我从我给出的链接中复制了 typedef。
我添加顶点的方式是这样的:
其中“i”等于一个整数。(例如int i = 9)
并且 eges 也很容易添加。现在,我有自己的结构化数组,称为“xNode”。例如: xNode[i] 保存节点的 XYZ 位置(xNode[i].X xNode[i].Y 等)的所有信息。
现在,当使用链接中的代码片段时,我已经这样做了:
这就是我卡住的地方,为“source(*pathIterator, dgraph)”和“target(*pathIterator, dgraph)”获取地址,但我需要顶点索引来访问xNode[i],i是NodeID(或以及顶点 ID | Vx[i])。我怎样才能做到这一点?
编辑:我试图做:
但这只是崩溃..