C++ boost::graph 从有向图中获取父顶点

2024-04-08

我有一个有向图(通过 boost::graph 库中的 adjacency_graph 实现),我试图找到某个顶点的父顶点。

过去(通过 pygraph)我只是简单地反转了有向图,然后进行了邻居搜索,但似乎使用 boost::reverse_graph 反转图会将我的有向图变成双向图,因此我无法使用adjacent_vertices方法不再了。

有没有更好的方法来获取父顶点?

Thanks.

这是我当前的示例代码:

#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/reverse_graph.hpp>
#include <iostream>

typedef boost::adjacency_list< boost::setS, boost::vecS, boost::directedS > Graph;
typedef boost::reverse_graph<Graph> Rgraph;
typedef Graph::vertex_descriptor Vertex;

int main()
{
    Graph graph;
    Vertex v0 = boost::add_vertex(graph);
    Vertex v1 = boost::add_vertex(graph);
    Vertex v2 = boost::add_vertex(graph);
    Vertex v3 = boost::add_vertex(graph);
    Vertex v4 = boost::add_vertex(graph);
    Vertex v5 = boost::add_vertex(graph);
    Vertex v6 = boost::add_vertex(graph);

    boost::add_edge(v0,v1,graph);
    boost::add_edge(v1,v2,graph);
    boost::add_edge(v2,v3,graph);
    boost::add_edge(v2,v4,graph);
    boost::add_edge(v3,v5,graph);
    boost::add_edge(v4,v5,graph);
    boost::add_edge(v5,v6,graph);

    Graph::adjacency_iterator ibegin, iend;
    for (boost::tie(ibegin, iend) = boost::adjacent_vertices(v2, graph); ibegin != iend; ++ibegin)
    {
        std::cout << *ibegin << std::endl;
    }

    std::cout << std::endl << "############# RGRAPH #############" << std::endl << std::endl;

    Rgraph rgraph(graph);
    Rgraph::adjacency_iterator rbegin, rend;
    for (boost::tie(rbegin, rend) = boost::adjacent_vertices(v2, rgraph); rbegin != rend; ++rbegin)
    {
        std::cout << *rbegin << std::endl;
    }
    std::cout << std::endl;

    return 0;
}

reverse_graph http://www.boost.org/libs/graph/doc/reverse_graph.html要求调整后的图是以下模型BidirectionalGraph http://www.boost.org/libs/graph/doc/BidirectionalGraph.html。如果您将图表更改为typedef boost::adjacency_list< boost::setS, boost::vecS, boost::bidirectionalS > Graph;你的程序编译并给出结果:

3
4

############# RGRAPH #############

1

我相信这是你应该期待的。

另一种方法不需要reverse_graph(但仍然需要bidirectionalS)是使用:

Graph::out_edge_iterator out_begin, out_end;
for (boost::tie(out_begin, out_end) = out_edges(v2,graph); out_begin != out_end; ++out_begin)
{   
    std::cout << target(*out_begin,graph) << std::endl;
}
std::cout << std::endl;

Graph::in_edge_iterator in_begin, in_end;
for (boost::tie(in_begin, in_end) = in_edges(v2,graph); in_begin != in_end; ++in_begin)
{   
    std::cout << source(*in_begin,graph) << std::endl;
}
std::cout << std::endl;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ boost::graph 从有向图中获取父顶点 的相关文章

  • 当从后台工作程序发生事件时,XlCall.Excel(XlCall.xlcCalculateNow) 抛出 XlCallException

    我有一个 ExcelFunction 来排队一些计算 ExcelFunction public static void QueueCalcs takes ranges var calcRequests builds list of calc
  • 类中是否可以有虚拟类声明?

    我正在为个人项目中框架的各个组件设置一个接口 我突然想到了一些我认为可能对接口有用的东西 我的问题是这是否可能 class a public virtual class test 0 class b public a public clas
  • 提升mapped_file_source、对齐方式和页面大小

    我正在尝试在性能很重要的上下文中解析一些大小高达几百兆字节的文本文件 因此我使用 boostmapped file source 解析器期望源以空字节终止 因此我想检查文件大小是否是页面大小的精确倍数 如果是 则使用较慢的非内存映射方法 我
  • 名称查找、实例化点 (POI) 和基本类型

    以下代码针对 X 进行编译 但不适用于 double struct X void foo double void foo X namespace NN struct A void foo A foo double error foo not
  • 如何在新窗口中打开图像或pdf文件?

    我有一个 gridview 它包含文件名和文件路径 图像和 pdf 格式文件 其中我使用了模板字段 在该字段下放置了 1 个图像按钮 单击该图像按钮 即 查看 按钮 时 我想在新窗口中打开所选文件 这是我的代码 protected void
  • 从点云检测平面集

    我有一组点云 我想测试3D房间中是否有角落 所以我想讨论一下我的方法 以及在速度方面是否有更好的方法 因为我想在手机上测试它 我将尝试使用霍夫变换来检测线 然后我将尝试查看是否有三条线相交 并且它们也形成了两个相交的平面 如果点云数据来自深
  • 如果在代码中添加元素,“FindName”将不起作用

    在 WPF 应用程序中 如果在 XAML 中声明 ContentControl
  • 如何使用 C# 查询远程 MS ACCESS .mdb 数据库

    我正在尝试使用 C 查询 mote MS ACCESS 数据库 mdb 文件 将文件复制到本地计算机时可以成功查询它 我只想远程放置文件 所以我的客户端程序不包含原始数据 static string m path http www xyz
  • 如何在 EF Core 2.1 中定义外键关系

    我的 DAL 使用 EF Core 2 1 这就是我的模型的样子 一名用户只能拥有一种角色 Role entity kind of master public class Role public int RoleId get set pub
  • MSChart 控件中的自定义 X/Y 网格线

    我有一个带有简单 2D 折线图的 C Windows 窗体 我想向其中添加自定义 X 或 Y 轴标记 并绘制自定义网格线 例如 以突出显示的颜色 虚线 我查看了 customLabels 属性 但这似乎覆盖了我仍然想显示的默认网格 这是为了
  • C 与 C++ 中的 JNI 调用不同?

    所以我有以下使用 Java 本机接口的 C 代码 但是我想将其转换为 C 但不知道如何转换 include
  • 在 C++ 代码 gdb 中回溯指针

    我在运行 C 应用程序时遇到段错误 在 gdb 中 它显示我的一个指针位置已损坏 但我在应用程序期间创建了 10 万个这样的对象指针 我怎样才能看到导致崩溃的一个 我可以在 bt 命令中执行任何操作来查看该指针的生命周期吗 谢谢 鲁奇 据我
  • WinForms - 加载表单时如何使用 PaintEventArgs 运行函数?

    我试图理解图形 在 Graphics FromImage 文档中 它有这样的示例 private void FromImageImage PaintEventArgs e Create image Image imageFile Image
  • WPF DataGrid - 在每行末尾添加按钮

    我想在数据网格的每一行的末尾添加一个按钮 我找到了以下 xaml 但它将按钮添加到开头 有人知道如何在所有数据绑定列之后添加它吗 这会将按钮添加到开头而不是末尾
  • 将日期时间显示为 MM/dd/yyyy HH:mm 格式 C#

    在数据库中 日期时间以 MM dd yyyy HH mm ss 格式存储 但是 我想以 MM dd yyyy HH mm 格式显示日期时间 我通过使用 String Format 进行了尝试 txtCampaignStartDate Tex
  • 时间:2019-03-17 标签:c#TimerStopConfusion

    我想通过单击按钮时更改文本颜色来将文本框文本设置为 闪烁 我可以让文本按照我想要的方式闪烁 但我希望它在闪烁几次后停止 我不知道如何在计时器触发几次后让它停止 这是我的代码 public Form1 InitializeComponent
  • 在 C 中使用 #define 没有任何价值

    If a define没有任何价值地使用 例如 define COMMAND SPI 默认值是0吗 不 它的评估结果为零 从字面上看 该符号被替换为空 然而 一旦你有了 define FOO 预处理器条件 ifdef FOO现在将是真的 另
  • MSVC编译器下使用最大成员初始化联合

    我正在尝试初始化一个LARGE INTEGER在 C 库中为 0 确切地说是 C 03 以前 初始化是 static LARGE INTEGER freq 0 在 MinGW 下它产生了一个警告 缺少成员 LARGE INTEGER Hig
  • IDisposable 的显式实现

    虽然有很多关于IDisposable在 SO 上找到 我还没有找到答案 我通常遵循这样的做法 当我的一个班级拥有一个IDisposable对象然后它也实现IDisposable并打电话Dispose在拥有的对象上 然而最近我遇到了一个类 它
  • 是否可以使用 Dapper 流式传输大型 SQL Server 数据库结果集?

    我需要从数据库返回大约 500K 行 请不要问为什么 然后 我需要将这些结果保存为 XML 更紧急 并将该文件通过 ftp 传输到某个神奇的地方 我还需要转换结果集中的每一行 现在 这就是我正在做的事情 TOP 100结果 使用 Dappe

随机推荐

  • 循环遍历空文本框,直到文本框有数据

    我确信对此有一个简单的解决方案 但我没有想到 我有一个带有三个文本框的表单 在运行主代码之前 我想确保每个文本框中都有数据 我已将 hasData 初始化为变量 该变量将决定代码是否可以继续前进 我在 Do While 循环中评估 hasD
  • 与 fetch_all 一起使用时,存储过程导致 mysqli 出现问题

    我已经将这个问题分解到其本质 但仍然遇到问题 当我尝试使用 fetch all 获取存储过程的结果时 我得到的结果按预期返回到数组 但后续 mysqli 调用抛出 命令不同步 错误 我什至尝试简化我的存储过程 CREATE PROCEDUR
  • ImageMagick 没有此图像格式的解码委托

    我在 Windows 和 wamp 服务器下工作 这是我使用 Imagick 的 PHP 代码 imagick new Imagick SERVER DOCUMENT ROOT this gt name where SERVER DOCUM
  • 使用 UITableView 登录

    如何像在 Skype 应用程序中一样创建用户名 密码登录 我知道这是一个分组表视图 但我该怎么做呢 我搜索了网站 发现了以下代码 UITableViewCell tableView UITableView tableView cellFor
  • 将 RadioButton IsChecked 绑定到 ListBoxItem IsSelected 和 ListBox IsFocused

    我见过其他与此非常相似的问题 但不知何故我仍然无法让它发挥作用 这是场景 我拥有的我有一个ListBox显示我的视图模型的列表 每个视图模型都有一个子级列表 这些子级显示在另一个嵌套列表框中 我正在使用一个DataTemplate为了达成这
  • 在 React Native 部分列表中过滤数据

    我正在使用 React Native 的SectionList SectionList 的数据看起来像这样 data title Asia data Taj Mahal Great Wall of China Petra title Sou
  • 如何修复 pg_dump 版本不匹配错误?

    当尝试将本地数据获取到 Heroku 时 我遇到两个不同版本的 pg dump 之间的版本不匹配 具体来说 我收到以下消息 pg dump server version 9 2 2 pg dump version 9 1 4 pg dump
  • Firefox:image.onload 中的 canvas.toDataURL 但返回透明图像

    我知道图像必须完整 在画布上使用 toDataURL 函数之前其加载已完成 将代码放在 image onload 函数中可确保这一点 还尝试了 canvas getContext 中的 preserveDrawingBuffer true
  • Angular2 错误处理最佳实践

    我有一个关于 Angular2 错误处理最佳实践的问题 这是我用来捕获错误的代码 Getdata data object let body JSON stringify data let headers new Headers Conten
  • 如何从 Java 程序动态创建新的 .java 文件?

    我想从 Java 程序创建一个 java 当我运行该程序时 将在我的项目中自动创建一个 Java 文件 并在该文件中创建一些运行时 动态 变量 我怎样才能做到这一点 我知道为此我必须使用 Reflection API 例如Class and
  • Qt5.8.0缺少vcruntime140d_app.dll

    我有一个非常简单的 Qt 应用程序 由 main cpp mainwindow cpp mainwindow h 和 mainwindow ui 组成 各内容如下所示 main cpp include mainwindow h includ
  • WordPress jQuery 未捕获类型错误:对象 [object Object] 的属性“$”不是函数

    我正在将 html 文件转换为 WordPress 主题 并使用插件 ZClip 将文本复制到剪贴板 ZClip 插件在我的 html 演示中工作正常 但是当转换为 WordPress 时 我在第 288 行中收到了这个奇怪的语法错误 Un
  • 从 Crystal Report 中的多个表推送数据

    我有一个名为 CR1 的水晶报表 现在我想将多个表中的数据填充到我的水晶报表 CR1 中 我使用的是VS2008 编码语言是ASP net中的C 任何帮助将不胜感激 创建一个存储过程然后将其用作报告的数据源 我会帮你的
  • 无法重现类型擦除示例的结果

    我正在阅读 Java 泛型和集合 第 8 4 节 作者在尝试解释二进制兼容性时定义了以下代码 interface Name extends Comparable public int compareTo Object o class Sim
  • python中列表切片语法的问题

    python 的文档中提到了扩展索引语法 slice start stop step 使用扩展索引语法时也会生成切片对象 例如 a start stop step or a start stop i See itertools islice
  • 在VBA中从SQL Server获取数据

    您好 下面是我的代码 我无法从 SQL 服务器获取数据 它的抛出错误为 Compiler error object required 连接没有问题 连接成功 请更正我的代码 帮我解决这个问题 Private Sub CommandButto
  • 迭代范围的函数式方法(ES6/7)[重复]

    这个问题在这里已经有答案了 以更实用的方式执行以下操作的最佳方法是什么 使用 ES6 ES7 let cols for let i 0 i lt 7 i cols push i i return cols 我尝试过 return 7 map
  • jQuery - 正则表达式选择和removeClass()?

    我收到了几个自动生成的 HTML 文档 长达数千行 我需要清理源代码 大多数情况下需要删除 table col 之类的类名 这是一个两步问题 选择具有 table col 的任何及所有类 其中 是 0 999 之间的整数 从元素中删除匹配的
  • 如何执行 GitHub 上的 hello_world 示例:linuxkit/linuxkit?

    情况与问题 我正在尝试跟随本指南 https medium com notsinge making your own linuxkit with docker for mac 5c1234170fb1关于 如何使用 docker for m
  • C++ boost::graph 从有向图中获取父顶点

    我有一个有向图 通过 boost graph 库中的 adjacency graph 实现 我试图找到某个顶点的父顶点 过去 通过 pygraph 我只是简单地反转了有向图 然后进行了邻居搜索 但似乎使用 boost reverse gra