19
19
20
20
#include < list>
21
21
#include < vector>
22
+ #include < iostream>
23
+ #include < iomanip>
22
24
23
25
// #include "bfs_edge_range.hpp"
24
26
#include " graph/graph.hpp"
30
32
#include " spice-graph.hpp"
31
33
#include " utilities.hpp"
32
34
33
- #include < vector>
34
-
35
35
int main () {
36
36
37
37
/* *
@@ -40,34 +40,150 @@ int main() {
40
40
std::vector<std::vector<size_t >> G (34 );
41
41
push_back_plain_fill (karate_index_edge_list, G, false , 0 );
42
42
static_assert (graph::adjacency_list<decltype (G)>);
43
+ std::cout << " Karate adjacency list:\n " ;
44
+ std::cout << " size = " << G.size () << std::endl;
45
+ for (size_t uid = 0 ; uid < G.size (); ++uid) {
46
+ std::cout << std::setw (3 ) << uid << " :" ;
47
+ for (auto && vid : G[uid]) {
48
+ std::cout << " " << vid;
49
+ }
50
+ std::cout << std::endl;
51
+ }
43
52
44
53
std::vector<std::list<std::tuple<size_t >>> H (34 );
45
54
push_back_plain_fill (karate_index_edge_list, H, false , 0 );
55
+ std::cout << " \n Karate (edge_list plain fill):\n " ;
56
+ std::cout << " size = " << H.size () << std::endl;
57
+ for (size_t uid = 0 ; uid < H.size (); ++uid) {
58
+ std::cout << std::setw (3 ) << uid << " :" ;
59
+ for (auto && [vid] : H[uid]) {
60
+ std::cout << " " << vid;
61
+ }
62
+ std::cout << std::endl;
63
+ }
64
+
65
+
46
66
push_back_fill (karate_index_edge_list, H, false , 0 );
67
+ std::cout << " \n Karate (edge_list fill...adding more):\n " ;
68
+ std::cout << " size = " << H.size () << std::endl;
69
+ for (size_t uid = 0 ; uid < H.size (); ++uid) {
70
+ std::cout << std::setw (3 ) << uid << " :" ;
71
+ for (auto && [vid] : H[uid]) {
72
+ std::cout << " " << vid;
73
+ }
74
+ std::cout << std::endl;
75
+ }
76
+
77
+ // ----------------------------------------------------------------------------
47
78
48
79
/* *
49
80
* Other graphs have vertices and edges tables
50
81
*/
51
82
auto a = make_plain_graph (ospf_vertices, ospf_edges);
83
+ std::cout << " \n OSPF plain graph:\n " ;
84
+ std::cout << " size = " << a.size () << std::endl;
85
+ for (size_t uid = 0 ; uid < a.size (); ++uid) {
86
+ std::cout << std::setw (3 ) << ospf_vertices[uid] << " :" ;
87
+ for (auto && vid : a[uid]) {
88
+ std::cout << " " << ospf_vertices[vid];
89
+ }
90
+ std::cout << std::endl;
91
+ }
92
+
52
93
auto b = make_property_graph (ospf_vertices, ospf_edges);
94
+ std::cout << " \n OSPF property graph:\n " ;
95
+ std::cout << " size = " << b.size () << std::endl;
96
+ for (size_t uid = 0 ; uid < b.size (); ++uid) {
97
+ std::cout << std::setw (3 ) << ospf_vertices[uid] << " :" ;
98
+ for (auto && [vid, val] : b[uid]) {
99
+ std::cout << " " << ospf_vertices[vid] << " :" << val;
100
+ }
101
+ std::cout << std::endl;
102
+ }
103
+
53
104
auto c = make_index_graph (ospf_vertices, ospf_edges);
105
+ std::cout << " \n OSPF index graph:\n " ;
106
+ std::cout << " size = " << c.size () << std::endl;
107
+ for (size_t uid = 0 ; uid < c.size (); ++uid) {
108
+ std::cout << std::setw (3 ) << ospf_vertices[uid] << " :" ;
109
+ for (auto && [vid, val] : c[uid]) {
110
+ std::cout << " " << ospf_vertices[vid] << " :" << std::get<2 >(ospf_edges[val]);
111
+ }
112
+ std::cout << std::endl;
113
+ }
54
114
55
115
auto d = make_plain_graph<decltype (ospf_vertices), decltype (ospf_edges), std::vector<std::list<size_t >>>(
56
116
ospf_vertices, ospf_edges, true );
117
+ std::cout << " \n OSPF plain graph (vector of lists):\n " ;
118
+ std::cout << " size = " << d.size () << std::endl;
119
+ for (size_t uid = 0 ; uid < d.size (); ++uid) {
120
+ std::cout << std::setw (3 ) << ospf_vertices[uid] << " :" ;
121
+ for (auto && vid : d[uid]) {
122
+ std::cout << " " << ospf_vertices[vid];
123
+ }
124
+ std::cout << std::endl;
125
+ }
57
126
58
127
auto e = make_index_graph<decltype (ospf_vertices), decltype (ospf_edges),
59
128
std::vector<std::vector<std::tuple<size_t , size_t >>>>(ospf_vertices, ospf_edges, true );
129
+ std::cout << " \n OSPF index graph (vector of vector of tuples):\n " ;
130
+ std::cout << " size = " << e.size () << std::endl;
131
+ for (size_t uid = 0 ; uid < e.size (); ++uid) {
132
+ std::cout << std::setw (3 ) << ospf_vertices[uid] << " :" ;
133
+ for (auto && [vid, val] : e[uid]) {
134
+ std::cout << " " << ospf_vertices[vid] << " :" << std::get<2 >(ospf_edges[val]);
135
+ }
136
+ std::cout << std::endl;
137
+ }
138
+
139
+ // ----------------------------------------------------------------------------
60
140
61
141
auto [f, g] = make_plain_bipartite_graphs<>(movies, actors, movies_actors);
62
142
auto h = make_plain_bipartite_graph (movies, actors, movies_actors, 0 );
63
143
auto i = make_plain_bipartite_graph (movies, actors, movies_actors, 1 );
144
+ std::cout << " \n Movies-actors plain bipartite graphs\n " ;
145
+ std::cout << " index 0: " << f.size () << " ==" << h.size () << std::endl;
146
+ for (size_t uid = 0 ; uid < f.size (); ++uid) {
147
+ std::cout << std::setw (20 ) << movies[uid] << " : |" ;
148
+ for (auto && vid : f[uid]) {
149
+ std::cout << actors[vid] << " |" ;
150
+ }
151
+ std::cout << std::endl;
152
+ }
153
+ std::cout << " index 1: " << g.size () << " ==" << i.size () << std::endl;
154
+ for (size_t uid = 0 ; uid < g.size (); ++uid) {
155
+ std::cout << std::setw (20 ) << actors[uid] << " : |" ;
156
+ for (auto && vid : g[uid]) {
157
+ std::cout << movies[vid] << " |" ;
158
+ }
159
+ std::cout << std::endl;
160
+ }
64
161
65
162
auto [j, k] = make_plain_bipartite_graphs<decltype (movies), decltype (actors), decltype (movies_actors),
66
163
std::vector<std::list<size_t >>>(movies, actors, movies_actors);
67
164
auto l = make_plain_bipartite_graph<decltype (movies), decltype (actors), decltype (movies_actors),
68
165
std::vector<std::list<size_t >>>(movies, actors, movies_actors, 0 );
69
166
auto m = make_plain_bipartite_graph<decltype (movies), decltype (actors), decltype (movies_actors),
70
167
std::vector<std::list<size_t >>>(movies, actors, movies_actors, 1 );
168
+ std::cout << " \n Movies-actors plain bipartite graphs (vector of lists)\n " ;
169
+ std::cout << " index 0: " << j.size () << " ==" << l.size () << std::endl;
170
+ for (size_t uid = 0 ; uid < j.size (); ++uid) {
171
+ std::cout << std::setw (20 ) << movies[uid] << " : |" ;
172
+ for (auto && vid : j[uid]) {
173
+ std::cout << actors[vid] << " |" ;
174
+ }
175
+ std::cout << std::endl;
176
+ }
177
+ std::cout << " index 1: " << k.size () << " ==" << m.size () << std::endl;
178
+ for (size_t uid = 0 ; uid < k.size (); ++uid) {
179
+ std::cout << std::setw (20 ) << actors[uid] << " : |" ;
180
+ for (auto && vid : k[uid]) {
181
+ std::cout << movies[vid] << " |" ;
182
+ }
183
+ std::cout << std::endl;
184
+ }
185
+
186
+ // ----------------------------------------------------------------------------
71
187
72
188
auto n = make_plain_graph<decltype (spice_vertices), decltype (spice_edges), std::vector<std::list<int >>>(
73
189
spice_vertices, spice_edges);
@@ -78,6 +194,19 @@ int main() {
78
194
auto r = make_property_graph (spice_vertices, spice_edges);
79
195
auto s = make_property_graph (spice_vertices, spice_edges_values);
80
196
197
+ std::cout << " \n Spice property graph (using edges+values)\n " ;
198
+ std::cout << " Size: " << s.size () << std::endl;
199
+ for (size_t uid = 0 ; uid < s.size (); ++uid) {
200
+ std::cout << std::setw (4 ) << spice_vertices[uid] << " : |" ;
201
+ for (auto && [vid, comp, val] : s[uid]) {
202
+ std::cout << std::setw (3 ) << spice_vertices[vid] << " :" << comp << " /" << val << " |" ;
203
+ }
204
+ std::cout << std::endl;
205
+ }
206
+
207
+
208
+
209
+
81
210
// bfs_edge_range(n, 1);
82
211
graph::views::edges_breadth_first_search (n, 1 );
83
212
0 commit comments