提升图initialize_vertex更改顶点颜色(访客)

Boost Graph initialize_vertex change vertex color (visitor)

本文关键字:颜色 顶点 访客 initialize vertex      更新时间:2023-10-16

我想建立一个访问者(用于dikstra),initialise_vertex充当"颜色图"修饰符。我想根据条件从搜索中排除一些顶点。所以我想在算法的初始化部分设置一些顶点"黑色"。

class dijkstra_2step : public boost::default_dijkstra_visitor
{
     public:
        dijkstra_2step(std::vector<Weight> dists, double threshold): distances(dists), threshold(threshold) {}
// THIS PART IS NOT CORRECT!!!! //
        void initialize_vertex(boost::graph_traits <unGraph>::vertex_descriptor u, const unGraph& g){
             if( distances[u] > threshold ) color[u] = black; // ??????
        }
//////////
     std::vector<Weight> distances;
     double threshold;
};

对上述访客有什么帮助吗?如何访问彩图?我在网上找不到东西。

你想要的可能是:

在 Dijkstra 的情况下,你实际上可以将任意容器(例如 std::map 甚至 std::vector)作为颜色映射传递;你只需要正确包装它:

  #include "boost/graph/properties.hpp"   
  std::vector<int> colorMap(num_vertices(g), boost::white_color);

之后,您可以在此容器中将某些顶点标记为"黑色"。然后你必须调用dijkstra_shortest_paths_no_init Dijkstra的变体。

 dijkstra_shortest_paths_no_init(g, src, ..., ..., &colorMap[0]);

只是为了记录,获取颜色图的标准方法是使用类似

boost::property_map< unGraph, boost::vertex_color_t >::type colorMap =
            boost::get(boost::vertex_color, g);

(前提是为给定的图形类型定义了此类映射)。

顺便说一句,或者,您可以使用filtered_graph而不是unGraph作为输入;您必须提供一个顶点过滤器来指定图形中的顶点。