Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_34_1/libs/graph/example/reachable-loop-tail.cpp @ 47

Last change on this file since 47 was 29, checked in by landauf, 16 years ago

updated boost from 1_33_1 to 1_34_1

File size: 2.3 KB
Line 
1//=======================================================================
2// Copyright 2001 Jeremy G. Siek, Andrew Lumsdaine, Lie-Quan Lee,
3//
4// Distributed under the Boost Software License, Version 1.0. (See
5// accompanying file LICENSE_1_0.txt or copy at
6// http://www.boost.org/LICENSE_1_0.txt)
7//=======================================================================
8#include <boost/config.hpp>
9#include <iostream>
10#include <fstream>
11#include <boost/graph/adjacency_list.hpp>
12#include <boost/graph/depth_first_search.hpp>
13#include <boost/graph/graphviz.hpp>
14#include <boost/graph/copy.hpp>
15#include <boost/graph/reverse_graph.hpp>
16
17int
18main(int argc, char *argv[])
19{
20  if (argc < 3) {
21    std::cerr << "usage: reachable-loop-tail.exe <in-file> <out-file>"
22      << std::endl;
23    return -1;
24  }
25  using namespace boost;
26  GraphvizDigraph g_in;
27  read_graphviz(argv[1], g_in);
28
29  typedef adjacency_list < vecS, vecS, bidirectionalS,
30    GraphvizVertexProperty,
31    GraphvizEdgeProperty, GraphvizGraphProperty > Graph;
32  Graph g;
33  copy_graph(g_in, g);
34
35  graph_traits < GraphvizDigraph >::vertex_descriptor loop_tail = 6;
36  typedef color_traits < default_color_type > Color;
37  default_color_type c;
38
39  std::vector < default_color_type > reachable_to_tail(num_vertices(g));
40  reverse_graph < Graph > reverse_g(g);
41  depth_first_visit(reverse_g, loop_tail, default_dfs_visitor(),
42                    make_iterator_property_map(reachable_to_tail.begin(),
43                                               get(vertex_index, g), c));
44
45  std::ofstream loops_out(argv[2]);
46  loops_out << "digraph G {\n"
47    << "  graph [ratio=\"fill\",size=\"3,3\"];\n"
48    << "  node [shape=\"box\"];\n" << "  edge [style=\"bold\"];\n";
49
50  property_map<Graph, vertex_attribute_t>::type
51    vattr_map = get(vertex_attribute, g);
52  graph_traits < GraphvizDigraph >::vertex_iterator i, i_end;
53  for (tie(i, i_end) = vertices(g_in); i != i_end; ++i) {
54    loops_out << *i << "[label=\"" << vattr_map[*i]["label"]
55      << "\"";
56    if (reachable_to_tail[*i] != Color::white()) {
57      loops_out << ", color=\"gray\", style=\"filled\"";
58    }
59    loops_out << "]\n";
60  }
61  graph_traits < GraphvizDigraph >::edge_iterator e, e_end;
62  for (tie(e, e_end) = edges(g_in); e != e_end; ++e)
63    loops_out << source(*e, g) << " -> " << target(*e, g) << ";\n";
64  loops_out << "}\n";
65  return EXIT_SUCCESS;
66}
Note: See TracBrowser for help on using the repository browser.