Boost logo

Boost Users :

Subject: [Boost-users] [BGL] Limited depth search without O(number_of_verices) complexity?
From: Ilja Honkonen (ilja.honkonen_at_[hidden])
Date: 2013-01-12 13:27:20


Hello

Is it possible to do a limited depth depth first search without using
O(N) additional memory? The following code seems to visit only a part of
the graph but it still requires O(N) memory for the external color map.
Could that be avoided with an internal color map? I didn't manage to get
depth_first_visit(...) to use an internal color map. Would the solution
work also with other graph types besides <vecS, vecS, ...>?

#include <iostream>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/depth_first_search.hpp>

using namespace std;
using namespace boost;

struct custom_dfs_visitor : public default_dfs_visitor
{
     template < typename Vertex, typename Graph >
     void discover_vertex(const Vertex& v, const Graph& g) const
     {
         cout << v << endl;
     }
};

struct Terminator {
     template<class Vertex, class Graph>
     bool operator()(const Vertex& v, const Graph& g)
     {
         return v > 2;
     }
};

int main()
{
     typedef adjacency_list<
         vecS,
         vecS,
         undirectedS
> Graph_T;

     Graph_T g(6);
     add_edge(0, 1, g);
     add_edge(1, 2, g);
     add_edge(2, 3, g);
     add_edge(3, 4, g);
     add_edge(4, 5, g);

     vector<default_color_type> color_map(num_vertices(g));
     depth_first_visit(
         g,
         vertex(0, g),
         custom_dfs_visitor(),
         make_iterator_property_map(
             color_map.begin(),
             get(vertex_index, g),
             color_map[0]
         ),
         Terminator()
     );
     cout << "size: " << color_map.size() << endl;

     return 0;
}

Thanks
Ilja


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net