提升:如何删除顶点的所有外边

时间:2015-04-28 22:43:08

标签: c++ boost graph

在boost图库中,remove_edge将使边迭代器无效,因此删除顶点的所有外边缘的正确方法是什么,例如,我试图删除顶点0的所有外边缘。下面的代码段不能正常工作。

Graph G(N);
graph_traits <Graph>::out_edge_iterator ei, ei_end;
for (boost::tie(ei, ei_end) = out_edges(0, G); ei != ei_end; ++ei) {
   vertex targ = target(*ei, G);
   cout << "target vtx = " << targ << endl;

   if ( edge(0, targ, G).second != 0 )
     remove_edge(0, targ, G);
}

1 个答案:

答案 0 :(得分:1)

您可以在外边缘(http://www.boost.org/doc/libs/1_58_0/libs/graph/doc/adjacency_list.html)上调用clear_out_edges {/ 1}}

  • void clear_vertex(vertex_descriptor u, adjacency_list& g)
    
         

    删除与顶点u的所有边。顶点仍然出现在图的顶点集中。

    对描述符和迭代器稳定性的影响与对u作为源或目标的所有边调用remove_edge()的影响相同。

  • void clear_out_edges(vertex_descriptor u, adjacency_list& g)
    
         

    从顶点u移除所有外边缘。顶点仍然出现在图的顶点集中。

    对描述符和迭代器稳定性的影响与为u作为源的所有边调用remove_edge()的影响相同。

    此操作不适用于无向图(使用clear_vertex()代替)。

  • void clear_in_edges(vertex_descriptor u, adjacency_list& g)
    

我必须支持任何 MutableGraph,只有clear_vertex