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 从有向图中获取父顶点 的相关文章

  • 使用 std::packaged_task/std::exception_ptr 时,线程清理程序报告数据争用

    我遇到了线程清理程序 TSan 的一些问题 抱怨某些生产代码中的数据争用 其中 std packaged task 通过将它们包装在 std function 中而移交给调度程序线程 对于这个问题 我简化了它在生产中的作用 同时触发 TSa
  • 未提供参数时如何指定 C# System.Commandline 行为?

    在我的控制台应用程序中 当未提供控制台参数时 将执行我指定列表 在本例中为参数 3 的任何处理程序 调用该处理程序时 布尔参数设置为 false 但对我来说 根本不调用它更有意义 如何防止这种情况发生并显示帮助文本 using System
  • 如何让 Swagger 插件在自托管服务堆栈中工作

    我已经用 github 上提供的示例重新提出了这个问题 并为任何想要自己运行代码的人提供了一个下拉框下载链接 Swagger 无法在自托管 ServiceStack 服务上工作 https stackoverflow com questio
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • 为什么调用非 const 成员函数而不是 const 成员函数?

    为了我的目的 我尝试包装一些类似于 Qt 共享数据指针的东西 经过测试 我发现当应该调用 const 函数时 会选择它的非 const 版本 我正在使用 C 0x 选项进行编译 这是一个最小的代码 struct Data int x con
  • 在一个平台上,对于所有数据类型,所有数据指针的大小是否相同? [复制]

    这个问题在这里已经有答案了 Are char int long 甚至long long 大小相同 在给定平台上 不能保证它们的大小相同 尽管在我有使用经验的平台上它们通常是相同的 C 2011 在线草稿 http www open std
  • 我可以使用 moq Mock 来模拟类而不是接口吗?

    正在经历https github com Moq moq4 wiki Quickstart https github com Moq moq4 wiki Quickstart 我看到它 Mock 一个接口 我的遗留代码中有一个没有接口的类
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se
  • 如何在 Xaml 文本中添加电子邮件链接?

    我在 Windows Phone 8 应用程序中有一些大文本 我希望其中有电子邮件链接 例如 mailto 功能 这是代码的一部分
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • System.IO.FileNotFoundException:找不到网络路径。在 Windows 7 上使用 DirectoryEntry 对象时出现异常

    我正在尝试使用 DirectoryEntry 对象连接到远程 Windows 7 计算机 这是我的代码 DirectoryEntry obDirEntry new DirectoryEntry WinNT hostName hostName
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com

随机推荐

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

    我确信对此有一个简单的解决方案 但我没有想到 我有一个带有三个文本框的表单 在运行主代码之前 我想确保每个文本框中都有数据 我已将 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