C++ 从图中删除顶点

2024-02-14

3he 以下使用 boost.1.46.1 进行编译

#include <boost/graph/adjacency_list.hpp>

struct Node {
  int id;
};

struct Edge {
  int source;
  int target;
  int weight;
};

int main() {
  /* an adjacency_list like we need it */
  typedef boost::adjacency_list<
    boost::setS, // edge container
    boost::listS, // vertex container
    boost::bidirectionalS, // directed graph
    Node, Edge> Graph;

  typedef boost::graph_traits<Graph>::vertex_descriptor Vertex;

  Graph gp1;

  std::cout << "Number of vertices 1: " << boost::num_vertices(gp1) << std::endl;
  Vertex v1 = boost::add_vertex(gp1);
  Vertex v2 = boost::add_vertex(gp1);

  std::cout << "Number of vertices 2: " << boost::num_vertices(gp1) << std::endl;

  gp1[v1].id = 3;
  gp1[v2].id = 4;

  Graph gp2(gp1);

  std::cout << "Number of vertices 3: " << boost::num_vertices(gp2) << std::endl;

  boost::remove_vertex(v2, gp2);

  std::cout << "Number of vertices 4: " << boost::num_vertices(gp1) << std::endl;
  std::cout << "Number of vertices 5: " << boost::num_vertices(gp2) << std::endl;

  boost::graph_traits<Graph>::vertex_iterator it, end;
  for (boost::tie( it, end ) = vertices(gp2); it != end; ++it) {
    if ( gp2[*it].id == 3 ) {
      boost::remove_vertex(*it, gp2);
    }
  }

  std::cout << "Number of vertices 6: " << boost::num_vertices(gp1) << std::endl;
  std::cout << "Number of vertices 7: " << boost::num_vertices(gp2) << std::endl;

  return 0;
}

在删除 v2 时,gp2 如何知道 v2:“boost::remove_vertex(v2, gp2)” 为什么gp1的顶点数减少了1?

为什么它在“boost::remove_vertex(*it, gp2)”处给出分段错误 我该如何解决它?


请注意,sehe 的解决方案仅适用于 VertexList=listS 的图,特别不适用于 VertexList=vecS 的图。另请注意,通常您不能存储顶点描述符或迭代器并稍后删除它们,因为这个来自 Boost Graph Library 网站 http://www.boost.org/doc/libs/1_47_0/libs/graph/doc/adjacency_list.html:

void remove_vertex(vertex_descriptor u, adjacency_list& g)

...如果 adjacency_list的VertexList模板参数为vecS,则所有 图的顶点描述符、边描述符和迭代器是 因该操作而无效。内置的 vertex_index_t 属性 每个顶点都被重新编号,以便在操作之后顶点 索引仍然形成一个连续的范围 [0, num_vertices(g))。 ...

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

C++ 从图中删除顶点 的相关文章

随机推荐

  • googleMap标记旋转位置变化

    我使用叠加层作为标记 这是我创建的以下代码
  • 使用 CSS 将 div 相对于不是其父级的另一个 div 定位

    我知道position relative and position absolute相对于其父级来定位 div 的技巧 但是如果 div 不是它的父级并且我想相对于它定位它怎么办 我正在尝试按照这些思路实施一些事情 我也知道position
  • 集合已修改;枚举操作可能无法执行。锁到处都在用怎么可能?

    这是一个只有我在编写和使用的小程序 现在我将编写使用导致此问题的哈希集的所有区域的代码 我不明白这怎么可能 该项目仅在主窗口中使用 hsProxyList 是一个哈希集 HashSet
  • 在 C# 中列出目录中的大量文件

    我正在尝试获取特定目录中的文件列表 其中包含超过 2000 万个文件 每个文件大小从 2 KB 到 20 KB 不等 问题是我的程序每次都会抛出内存不足异常 而像 robocopy 这样的工具可以很好地将文件夹复制到另一个目录 没有任何问题
  • 如何在 Yii2 查询中使用不等于

    我想用一个yii2我想在其中检查不等于条件的查询 我这样尝试过 但没有给出想要的结果 我该怎么做 details MovieShows find gt where movie id gt id gt andWhere location id
  • 有没有可以预览 Markdown 文件的 Vim 插件? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我喜欢标记和 Mou 编辑器 它具有即时预览渲染结果的强大功能 所以我想知道 有没有办法在 Vim 中做
  • 科尔多瓦可以捏合放大吗

    这方面的信息并不多 而且我能找到的信息也非常模糊且无益 我的意思是希望我的 cordova phonegap 应用程序中的一个页面具有可以捏合以放大和平移的图像 这可能吗 如果可以 我该怎么做 在本机代码中 紧接此行之后 super loa
  • $_SERVER['REMOTE_USER'] 可以被欺骗吗?

    我遇到一种情况 我正在打开基于 SERVER REMOTE USER 变量的文件 我不认为这是可以欺骗的 但只是想确认一下 我不想让自己容易受到任意文件读取的影响 是的 该用户名是远程用户指定的用户名 您还需要验证密码 如果密码是由您的服务
  • 从两组日期范围中查找差距日期范围 C#

    我有基准日期范围和测试日期范围 我需要获取基础和测试之间的差距 这意味着缺少基础中但不在测试中的日期范围 最好的方法是什么 Base Date Ranges 1 1 2012 1 10 2012 1 11 2012 1 25 2012 Te
  • 什么时候必须在 Javascript 中使用 new 关键字?

    有时我应该打电话new Foo 创建一个新的 foo 对象 但有时我可以调用Foo 创建它 一般来说 对于给定的函数 我如何知道使用哪个 什么是new关键字做什么 See 这个问题 https stackoverflow com quest
  • 如何取消对 jar 的签名?

    有没有办法取消 java jar 文件的签名 我尝试在开发环境中使用一些已签名的 jar 但遇到安全异常 因此我想取消对这些 jar 的签名 以便稍后在准备部署时对其进行签名 我不知道答案 但我会这样做 解压相关的 jar 文件 jar 只
  • 如何创建腾讯微博(qq)分享按钮?

    我需要实现相当于网站中文翻译的 Tweet 按钮 即not我已经得到的 在微博上分享 按钮 使用生成器here http open weibo com sharebutton 而是一个腾讯 QQ微博分享按钮 到目前为止我所做的 订阅微博 阅
  • 将 sed 的输出存储到变量中[重复]

    这个问题在这里已经有答案了 我想将文件的第二行存储到一个变量中 所以我这样做 sed n 2p myfile 我希望存储的输出sed命令写入名为的变量line 执行此操作的正确语法是什么 Use 命令替换 http tldp org LDP
  • CAD 爆炸图算法

    我正在制作一个程序来查看 3D CAD 模型 并希望构建自动分解视图 将看到的所有组件都是轴对称的 有些可能不是 但大多数是 我想找出一种算法 用于自动将组件中的零件移动到分解视图位置 这是我想通过算法实现的示例 当然不包括标签 我必须使用
  • NaN 和 None 有什么区别?

    我正在使用 pandas 读取 csv 文件的两列readcsv 然后将值分配给字典 这些列包含数字和字母的字符串 有时会出现单元格为空的情况 在我看来 读取该字典条目的值应该是None但反而nan被安排了 一定None更能描述空单元格 因
  • 类型“Observable<{}>”不可分配给类型“Observable |”布尔值'

    我试图跟随本教程 https angular io docs ts latest guide router html route config 但我收到错误 路径匹配 完整 我尝试改变 角度 路由器 to 3 0 0 beta 2 还是同样
  • 检查 Linux 系统上 python 多处理中的 fork 行为

    我必须从许多进程中访问一组大型且不可选取的 python 对象 因此 我想确保这些对象没有被完全复制 根据评论this https stackoverflow com questions 5549190 is shared readonly
  • 如何在 Intellij 13 中创建测试目录?

    我是一个使用 v13 的 Intellij 菜鸟 我有一个简单的 java 项目 默认 结构 如下所示 idea src com test mytestClass1 mytestClass2 现在 我想编写一个简单的测试 并将该代码放在 s
  • “latin-1”编解码器无法对字符进行编码

    我的代码适用于英语文本 但不适用于俄语 search text 我该如何修复它 错误文本 UnicodeEncodeError latin 1 编解码器无法对位置 41 46 中的字符进行编码 主体 不是有效的 Latin 1 如果您想以
  • C++ 从图中删除顶点

    3he 以下使用 boost 1 46 1 进行编译 include