Boost logo

Boost Users :

Subject: [Boost-users] [Graph] Computing reachable vertices on a graph
From: Florian.PONROY_at_[hidden]
Date: 2009-03-20 04:44:53


Hi all,

I need to get the list of all reachable vertices from a given vertex in a graph. I'm currently using the BFS algorithm to achieve that, which seems to fit well to my need. To understand its behavior, I simplified the http://www.boost.org/doc/libs/1_38_0/libs/graph/example/bfs.cpp example source code to this :

  typedef boost::adjacency_list< boost::vecS,
                                 boost::vecS,
                                 boost::directedS > Graph;

  Graph G(1);
  boost::add_edge(0, 1, G);
  boost::add_edge(1, 2, G);
  boost::add_edge(2, 5, G);
  boost::add_edge(3, 2, G);
  boost::add_edge(4, 3, G);
  boost::add_edge(5, 3, G);

  typedef Graph::vertex_descriptor Vertex;
  std::vector<int> distances;
  distances.reserve(6);

  std::fill_n(&distances[0], 6, 0);

  // The source vertex
  Vertex s = *(boost::vertices(G).first);

  boost::breadth_first_search(G,
                              s,
                              boost::visitor(boost::make_bfs_visitor(boost::record_distances(&distances[0], boost::on_tree_edge()))));

  boost::print_graph(G);

  for (int i = 0; i < 6; i++)
  {
          std::cout << "Node " << i << " : ";
          
          if (distances[i] != 0)
                  std::cout << "reachable, distance " << distances[i] << std::endl;
          else
                  std::cout << "not reachable" << std::endl;
  }

However, I encounter the following issue : in this example, vertices are numbered from 0 to 5. However, in my project, this is not the case, vertices could be numbered 5, 38, 42, 384... Using a vector in that case might not work as expected, a map<vertex, distance> would probably be better. I'm not quite familiar with BGL so far, maybe should I deal with a specific property map? Or using a visitor to record a vertex distance upon graph discovery? I'm a little bit lost, any help will be greatly appreciated!

Thank you very much,

-- 
Florian PONROY
Thales Land & Joint France
Tel. : +33(0)1 41 304 363
Fax : +33(0)1 41 303 560
Email : florian.ponroy_at_[hidden]

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