Boost logo

Boost Users :

From: Dmitry Bufistov (dmitry_at_[hidden])
Date: 2006-02-14 07:33:28


boost-users-request_at_[hidden] wrote:

>
> Hello,
>
> I want to find the (weakly) connected components and the biconnected
> components of a directed(bidirectional) graph.
> But these methods need a undirected graph as input. Does anyone know a
> simple way to create a undirected graph from a directed graph or a
> undirected view of a directed graph?
>
> Thanks a lot,
>
> Jean-Noël
>
>
> ------------------------------------------------------------------------
>
Hi,
Probably this could help

#include <boost/graph/copy.hpp>
boost::copy_graph()

if not something like this should work

template <class TGraph1, class TGraph2> void
directed2undirected(const TGraph1& directed_graph, TGraph2&
undirected_graph)
{
    typedef typename boost::graph_traits<TGraph1>::vertex_descriptor
vertex1;
    typedef typename boost::graph_traits<TGraph2>::vertex_descriptor
vertex2;
    typedef typename boost::graph_traits<TGraph1>::edge_iterator
edge_iterator;

    std::vector<vertex1> orig_vertices;
    std::copy(vertices(directedt_graph).first,
vertices(directed_graph).second, std::back_inserter(orig_vertices));
    std::map<vertex1, vertex2> vertex_map;
   
   // undirected = TGraph2(boost::num_vertices(directed_graph));
    for (std::size_t i = 0; i < num_vertices(directed_graph); ++i) {
        vertex_map[orig_vertices[i]] = boost::add_vertex(undirected_graph);
       ///Also would be good to copy properties, but it isn't necessary
as far as I understand
    }

    for (edge_iterator e = edges(directed_graph).first; e !=
edges(directed_graph).second; ++e) {
        boost::add_edge(vertex_map[source(*e, directed_graph)],
vertex_map[target(*e, directed_graph)], /*directed_graph[*e],*/
undirected_graph);
    }
}

I don't know if there is some way to do it without copying. If some,
please let me know.
Regards,
--dmitry


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