【问题标题】:Boost Graph initialize_vertex change vertex color (visitor)Boost Graph initialize_vertex 改变顶点颜色(访问者)
【发布时间】:2017-04-20 02:26:36
【问题描述】:

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

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;
};

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

【问题讨论】:

    标签: c++ boost boost-graph


    【解决方案1】:

    你想要的大概如下:

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

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

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

     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;您将必须提供一个顶点过滤器来指定图中的哪些顶点。

    【讨论】:

    • 关于色图:每个搜索都有一个对吗?我需要在某个地方定义它吗?也许我错过了什么?
    • 是的,所有搜索图算法都使用一些颜色图。查看文档,通常搜索有一个UTIL/OUT: color_map(ColorMap c_map) 的参数。这意味着您可以提供自己的。如果您不这样做,BGL 将创建一个临时的。
    • boost::color_white 定义在哪个标头中?找不到。
    • @kebs,感谢您关注我的错字。它是white_color,而不是color_white。它在 graph/properties.hpp 中定义。您不必使用它,也可以在代码中的任何位置,甚至在匿名命名空间中,制作自己的颜色enum { color_white, color_black, color_grey }
    • 谢谢,我试图在您的回答的帮助下设置属性映射,但无法摆脱该错误。 (最后我用 0 初始化了向量)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 2010-10-14
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多