Boost logo

Boost Users :

From: Roman Schindlauer (roman_at_[hidden])
Date: 2006-01-28 04:52:49


Hello,

Warning ahead - this is a newbie question. I need to find weak and
strong components of a graph. So far, my code is as simple as it could
be (edges being a std::vector of std::pair<unsigned,unsigned>):

  typedef adjacency_list <vecS, vecS, undirectedS> Graph;
  Graph G;
  for (Edges::const_iterator ei = edges.begin(); ei != edges.end();++ei)
      add_edge((*ei).first, (*ei).second, G);
  std::vector<int> component(num_vertices(G));
  int num = connected_components(G, &component[0]);

However, my vertices are not contiguously numbered. Hence, the following edges

  (8, 9)
  (9, 10)
  (12, 13)

result in these connected components:

  0: 0
  1: 1
  2: 2
  3: 3
  4: 4
  5: 5
  6: 6
  7: 7
  8: 8, 9, 10
  9: 11
  10: 12, 13

which is not what I want (just two wcc: 8, 9, 10 and 12, 13). I was
reading into the property_map stuff, but as far as i understand, that
would not help here. Do I have to remap the indices beforehand or is
there a way to convince Boost that there are no other nodes than those
in the edges?

Best regards,
Roman


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