1: /** @file quick_tour1.cpp */
3: //=======================================================================
4: // Copyright 2001 Jeremy G. Siek, Andrew Lumsdaine, Lie-Quan Lee,
5: //
6: // Distributed under the Boost Software License, Version 1.0. (See
7: // accompanying file LICENSE_1_0.txt or copy at
8: // http://www.boost.org/LICENSE_1_0.txt)
9: //=======================================================================
12: #include <boost/config.hpp>
13: #include <iostream>
14: #include <boost/graph/adjacency_list.hpp>
15: using namespace boost;
19: template <typename VertexDescriptor, typename VertexNameMap>
20: void print_vertex_name
21: (
22: VertexDescriptor v,
23: VertexNameMap name_map
24: )
25: {
26: std::cout << get(name_map, v);
27: }
31: template <typename Graph, typename TransDelayMap, typename VertexNameMap>
32: void print_trans_delay
33: (
34: typename graph_traits <Graph>::edge_descriptor e,
35: const Graph& g,
36: TransDelayMap delay_map,
37: VertexNameMap name_map
38: )
39: {
40: std::cout << "trans-delay(" << get(name_map, source(e, g)) << ","
41: << get(name_map, target(e, g)) << ") = " << get(delay_map, e);
42: }
46: template < typename Graph, typename VertexNameMap >
47: void print_vertex_names
48: (
49: const Graph& g,
50: VertexNameMap name_map
51: )
52: {
53: std::cout << "vertices(g) = { ";
54: typedef typename graph_traits < Graph >::vertex_iterator iter_t;
55: for (std::pair < iter_t, iter_t > p = vertices(g);
56: p.first != p.second;
57: ++p.first)
58: {
59: print_vertex_name(*p.first, name_map);
60: std::cout << ' ';
61: }
62: std::cout << "}" << std::endl;
63: }
67: template <typename Graph, typename TransDelayMap, typename VertexNameMap>
68: void print_trans_delays
69: (
70: const Graph& g,
71: TransDelayMap trans_delay_map,
72: VertexNameMap name_map
73: )
74: {
75: typename graph_traits < Graph >::edge_iterator first, last;
76: for (tie(first, last) = edges(g); first != last; ++first)
77: {
78: print_trans_delay(*first, g, trans_delay_map, name_map);
79: std::cout << std::endl;
80: }
81: }
85: template < typename Graph, typename VertexNameMap, typename TransDelayMap >
86: void build_router_network
87: (
88: Graph& g,
89: VertexNameMap name_map,
90: TransDelayMap delay_map
91: )
92: {
93: typename graph_traits <Graph>::vertex_descriptor a, b, c, d, e;
94: a = add_vertex(g);
95: name_map[a] = 'a';
96: b = add_vertex(g);
97: name_map[b] = 'b';
98: c = add_vertex(g);
99: name_map[c] = 'c';
100: d = add_vertex(g);
101: name_map[d] = 'd';
102: e = add_vertex(g);
103: name_map[e] = 'e';
105: typename graph_traits <Graph>::edge_descriptor ed;
106: bool inserted;
108: tie(ed, inserted) = add_edge(a, b, g);
109: delay_map[ed] = 1.2;
110: tie(ed, inserted) = add_edge(a, d, g);
111: delay_map[ed] = 4.5;
112: tie(ed, inserted) = add_edge(b, d, g);
113: delay_map[ed] = 1.8;
114: tie(ed, inserted) = add_edge(c, a, g);
115: delay_map[ed] = 2.6;
116: tie(ed, inserted) = add_edge(c, e, g);
117: delay_map[ed] = 5.2;
118: tie(ed, inserted) = add_edge(d, c, g);
119: delay_map[ed] = 0.4;
120: tie(ed, inserted) = add_edge(d, e, g);
121: delay_map[ed] = 3.3;
123: }
133: int main()
134: {
135: typedef adjacency_list <listS, listS, directedS,
136: property <vertex_name_t, char>,
137: property <edge_weight_t, double>> graph_t;
138: graph_t g;
140: property_map <graph_t, vertex_name_t>::type name_map =
141: get(vertex_name, g);
142: property_map <graph_t, edge_weight_t>::type delay_map =
143: get(edge_weight, g);
145: build_router_network(g, name_map, delay_map);
146: print_vertex_names(g, name_map);
147: print_trans_delays(g, delay_map, name_map);
148: }