使用 boost 图库检测无向图中的循环

2024-03-11

从昨天开始我就一直被这个问题困扰。不幸/幸运的是,这个问题只占我的超级巨大(对我来说,一个 c++ 新手)算法的 0.5% 左右,因此需要一个现有代码库,人们可以调整并让事情正常工作。

我想检测并给出无向图中的所有圆圈。我的边缘没有加权。是的,我真正需要的是所有循环,即有向图的所有哈密尔顿循环之类的东西

我一直在使用 boost 图库,DFS 算法似乎很有前途,但是,它只访问顶点一次,因此不能给出所有哈密顿圆。

目前,我只需要代码能够工作,以便我可以继续我的算法设计,之后我可能会考虑性能问题。即使是具有 5 个嵌套 for 循环的解决方案也是受欢迎的。

这是我从 boost 获得并使用的代码,但我不知道如何记录和访问 back_edges 的前身,即使解决了,boost DFS 也只会访问顶点一次:

struct detect_loops : public boost::dfs_visitor<>
{
   template <class Edge, class Graph>
   void back_edge(Edge e, const Graph& g) {
      std::cout << source(e, g)
        << " -- "
        << target(e, g) << "\n";
   }
};

int main(int,char*[])
{
    typedef std::pair<int,int> Edge;
    std::vector<Edge> edges;
    edges.push_back(Edge(0,1));
    edges.push_back(Edge(1,2));
    edges.push_back(Edge(2,3));
    edges.push_back(Edge(3,1));
    edges.push_back(Edge(4,5));
    edges.push_back(Edge(5,0));
    edges.push_back(Edge(4,0));
    edges.push_back(Edge(5,6));
    edges.push_back(Edge(2,6));

    typedef adjacency_list<
       vecS, vecS, undirectedS, no_property,
       property<edge_color_t, default_color_type>
    > graph_t;
    typedef graph_traits<graph_t>::vertex_descriptor vertex_t;

    graph_t g(edges.begin(), edges.end(), 7);

    std::cout << "back edges:\n";
    detect_loops vis;
    undirected_dfs(g, root_vertex(vertex_t(0)).visitor(vis).edge_color_map(get(edge_color, g)));
    std::cout << std::endl;

    return 0;
} 

上面的例子说只有 3 个周期,通常我预计会有超过 4 个周期,其中单个顶点可能出现在多个周期中。其次,我什至无法访问所有三个提升的周期back_edge()给我这样的std::vector<uInt32> fCycle1, fCycle2,fCycle3。我所得到的一切back_edge()只是源顶点和目标顶点。

我将不胜感激任何帮助和提示。到目前为止,这里的所有示例都只是检测一个循环或多个循环的存在,但没有一个示例显示如何列出所有存在的循环。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 boost 图库检测无向图中的循环 的相关文章

  • 如何与android的静态boost库链接?

    我在使用 Android ndk r5b 将 boost 库移植和链接到 android 时遇到问题 我首先使用以下步骤构建 boost 库 没有 mpi python 1 注释掉boost 1 46 0 libs thread build
  • Boost python 导出单例

    我有一个单例 来自 boost serialization class LogManager public boost serialization singleton
  • 在 cygwin 上编译 android boost 时无法识别的命令行选项

    我正在尝试在 cygwin 的帮助下编译 boost以下文章 http www codexperiments com android 2011 05 tips tricks building boost with ndk r5 但是当我运行
  • C++ Boost.asio Ping

    我正在尝试编写一个程序来列出网络上设备的所有 IP 地址 其主要组成部分之一是能够对设备执行 ping 操作 这个程序必须在Linux Windows和Mac上运行 所以我选择了Boost库 我设法在文档中找到这个示例 http www b
  • Visual Studio 2012 C++ 使用 Boost Signal2 编译错误

    我正在使用 Visual Studio 2012 Ultimate 和以下 Boost Signals2 代码 https github com cfobel boost signals2 blob master hello world 0
  • 不明确的元函数或未定义的类型

    我是元功能的新手 我想编写一个函数 将复合类型中某种类型的所有匹配项替换为其他类型 在示例中 replace
  • Boost C++ 和 Android 3

    我尝试用谷歌和SO搜索 到目前为止 我只能找到相互矛盾的信息 如果 Boost 和 Android 结合太难 也许有替代品 我对 smart ptr 线程 函数 lexical cast string algo 和容器特别感兴趣 任何意见都
  • 如何使用代理将 boost::asio 连接到 HTTPS 服务器?

    在我们的应用程序中 我们使用 boost asio 来使用 HTTP 和 HTTPS 进行连接 我们还可以使用 HTTP 代理 现在我需要使用代理添加对 HTTPS 服务器的支持 我研究了相当多的样本 发现所需的步骤似乎是 创建到代理的 H
  • 使用 Boost program_options 指定级别(例如 --verbose)

    我的一些选择有多个级别 例如的 冗长 我希望我的用户在以下两种等效样式之间进行选择 no argument verbosity of 1 my program v count the v s verbosity of 4 my progra
  • 返回一个需要由智能指针保存的“指针”

    我有一个项目 我想更多地使用智能指针 总的来说 我在这个目标上取得了成功 然而 我遇到了一些我不确定 最佳实践 是什么的事情 基本上我想从函数返回一个 指针 但是require用户将其放在智能指针中 不仅如此 我不想强 制使用特定的智能指针
  • 无法在 Visual Studio 和 vcpkg 中构建 cmake 项目(致命错误 C1083)

    我今天安装了vcpkg 启用了与Visual Studio的集成 即 vcpkg集成安装 并开始安装库 我基本上安装了 cpprestsdk 并触发了 boost 库的安装 然后我在 Visual Studio CMake 中打开该项目 当
  • 提升shared_from_this<>()

    有人可以用几句话概括一下如何提升shared from this lt gt 应该使用智能指针 特别是从使用绑定函数在 io service 中注册处理程序的角度来看 编辑 一些回复要求提供更多背景信息 基本上 我正在寻找 陷阱 即人们使用
  • Boost MPI 在监听列表时不会释放资源?

    这是一个后续问题如何释放 boost mpi request https stackoverflow com questions 44078901 how do i free a boostmpirequest 我在监听列表而不是单个项目时
  • boost::algorithm::join 的一个很好的例子

    我最近想用提升 算法 加入 http www boost org doc libs 1 41 0 doc html string algo reference html header boost algorithm string join
  • 如何查找boost运行时版本

    我正在编写一个使用 boost 的 C 库 在这个库中 我想包含有关用于编译我的库的二进制版本的 boost 版本的信息 我可以使用宏BOOST VERSION这很好 我还想确定哪个是 boost 的运行时版本 以便我可以与用于编译我的库的
  • 提升 asio 和 endian

    我不知道 boost asio 是否处理字节序 Asio 确实会转换类似的东西port进入网络秩序 转换函数不作为官方接口的一部分公开 而是隐藏在detail名称空间代替 例如boost asio detail socket ops hos
  • 尝试使用 boost.multi precision 编译项目时出现 C2143/C2518

    我在尝试让 boost multi precision 在我的 VC2017 项目中工作时遇到了问题 我试图使最简单的项目成为可能作为概念证明 include
  • 防止 boost::asio::io_context 在空轮询调用时停止

    此代码调用发布的句柄 boost asio io context ioc boost asio post ioc std cout lt lt lol lt lt std endl ioc poll 而这并没有 boost asio io
  • 使用 Boost 序列化并发送数据结构?

    我有一个如下所示的数据结构 typedef struct unsigned short m short1 unsigned short m short2 unsigned char m character MyDataType 我想使用 b
  • boost::program_options:带有固定和可变标记的参数?

    是否可以在 boost program options 中使用此类参数 program p1 123 p2 234 p3 345 p12 678 即 是否可以使用第一个标记指定参数名称 例如 p 后跟一个数字 是动态的吗 我想避免这种情况

随机推荐

  • AngularJS:如何模拟注入范围内的 FormController?

    我在控制器内部发生了一些验证逻辑 我想对该逻辑进行单元测试 问题是我不知道如何模拟自动注入范围的表单控制器 任何想法 AFAIK 你可以尝试两种方法 use the compile服务 并使用适当的方法编译您的模板 scope 别忘了所有
  • 使用 knitr 制作动画 rgl 图表

    我想加入动画rgl我的图表 Rnw文档通过knitr 这是我的 MWE documentclass article lt lt label setup include FALSE gt gt opts chunk set fig path
  • 如何根据视图边界在Cesium Map中向左或向右旋转

    想要模仿 CesiumJS 应用程序中的左右箭头键 类似于 Google 地球导航 按向右或向左箭头键应分别向右或向左旋转地球约 5 的视图边界 如果缩小 则旋转较大范围 而放大则旋转较小范围 已经查看了文档Viewer https ces
  • C# 延迟初始化 && 竞争初始化?

    After about LazyInitializer那是 它提供了另一种具有多线程的初始化模式 竞赛初始化 这是一个示例 Expensive expensive public Expensive Expensive get Impleme
  • flex-direction 列属性不起作用

    我有一个ul标记为display flex 我需要按列排序flex direction column 但它不起作用 容器的 CSS nav li four columns ul sub menu width 600px display fl
  • Emacs:与 TAB 的键绑定会破坏迷你缓冲区中的自动完成功能

    简而言之 我只是在 TAB 键上设置了键绑定 但是现在当我将 TAB 推入迷你缓冲区以自动完成命令时 它会失败并显示以下消息 The mark is not set now so there is no region 换句话说 当我的光标位
  • 任务“:audioplayers:compileDebugKotlin”执行失败

    当我尝试将我的 Flutter 应用程序编译到 Android 模拟器中时 我遇到了这个讨厌的错误 这是错误日志 太长 无法完整粘贴 在调试模式下在 sdk gphone x86 上启动 lib main dart 运行 Gradle 任务
  • 将 Sqlite 数据导入 Google App Engine

    我有一个相对广泛的 sqlite 数据库 我想将其导入到我的 Google App Engine python 应用程序中 我使用 appengine API 创建了模型 该模型与现有架构很接近 但并不完全相同 我编写了一个导入脚本来从 s
  • 将一个 UIView 的绘制内容复制到另一个 UIView

    我想采用 UITextView 并允许用户在其中输入文本 然后触发将内容复制到石英位图上下文上 有谁知道我如何执行此复制操作 我应该重写drawRect方法并调用 super drawRect 并且then获取生成的上下文并复制它 如果是这
  • 是否可以在 phpmyadmin 中分页浏览视图? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 运行 phpmyadmin 版本 3 4 8 我刚刚注意到 显示视图时没有 分页 按钮 可以让您像浏览表格一样跳转到下一页或最后一页 我知
  • Mvc Api 从请求中获取凭据

    我花了很长时间才找到这方面的东西 尽管我认为这很简单 我正在使用 NET MVC 4 5 开发 API 我希望最终用户能够发送类似 PowerShell 的请求 webclient new object System Net WebClie
  • 如何解决AdjustCapsLockLEDForKeyTransitionHandling问题?

    我正在尝试使用KeyListener输入信息 例如使用箭头键在平面上移动对象 但是一旦我按下第一个键 就会抛出以下错误 2021 05 20 09 55 35 400 java 36269 3330310 TSM AdjustCapsLoc
  • SwiftUI TabView PageTabViewStyle 阻止更改选项卡?

    我有一个TabView在 SwiftUI 中PageViewTabStyle这样我就可以从一页滑动到另一页 我想要一个设置来 锁定 当前视图 这样用户就无法滑动 谷歌搜索和阅读文档并没有给我带来任何明显的结果 所以我希望 SO 上的专家可以
  • setTimeout 的最小毫秒值是多少?

    我想把 var minValue 0 if typeof callback function setTimeout callback minValue 当我用 JavaScript 实现回调函数时 这段代码 但我发现现代浏览器和一些旧浏览器
  • /TSAWARE 链接器标志对 PE 可执行文件有什么作用?

    将 TSAWARE 链接器标志添加到我的一个项目 Visual Studio 6 后 我惊讶地发现 PE 文件 idata 中出现了一个新部分 如果我不设置该标志 导入将合并到 rdata 中 为了说明 问题 我们从一个简单的控制台程序开始
  • 地理编码器“等待服务器响应超时”

    我正在尝试将纬度和经度转换为地址 当我使用 WIFI 时 我得到了正确的答案 但当我尝试使用 3G LTE 时 出现错误 等待服务器响应超时 我在调试模式下发现了这一点 但为什么 我使用相同的信息 纬度 经度 我该如何修复它 这是我的功能
  • 如何从 c/c++ 源代码获取适用于 Windows 的 python .pyd? (更新:现在在 Python 中轻快,以防万一这是你想要的)

    如何从 C C 扩展源代码获取 Windows 的 pyd 文件 或我可以导入到 Python 的其他项目 edit 我想使用的特定库 BRISK 包含在OpenCV http opencv org 2 4 3 所以我暂时不需要这个技能了
  • 二叉树的最低共同祖先(不是二叉搜索树)

    我尝试使用 Tarjan 算法和网站上的一种算法来解决这个问题 http discuss techinterview org default asp interview 11 532716 6 http discuss techinterv
  • Powerpoint 的禁用和自动恢复选项

    我无法找到正确的属性 方法来禁用 powerpoint 的自动恢复选项 对于 Excel 和 Word 如下 对于Excel 这可以做到 wb EnableAutoRecover False 和单词 word Options SaveInt
  • 使用 boost 图库检测无向图中的循环

    从昨天开始我就一直被这个问题困扰 不幸 幸运的是 这个问题只占我的超级巨大 对我来说 一个 c 新手 算法的 0 5 左右 因此需要一个现有代码库 人们可以调整并让事情正常工作 我想检测并给出无向图中的所有圆圈 我的边缘没有加权 是的 我真