LAL: Linear Arrangement Library 24.10.00
A library focused on algorithms on linear arrangements of graphs.
Loading...
Searching...
No Matches
output.hpp
1/*********************************************************************
2 *
3 * Linear Arrangement Library - A library that implements a collection
4 * algorithms for linear arrangments of graphs.
5 *
6 * Copyright (C) 2019 - 2024
7 *
8 * This file is part of Linear Arrangement Library. The full code is available
9 * at:
10 * https://github.com/LAL-project/linear-arrangement-library.git
11 *
12 * Linear Arrangement Library is free software: you can redistribute it
13 * and/or modify it under the terms of the GNU Affero General Public License
14 * as published by the Free Software Foundation, either version 3 of the
15 * License, or (at your option) any later version.
16 *
17 * Linear Arrangement Library is distributed in the hope that it will be
18 * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU Affero General Public License for more details.
21 *
22 * You should have received a copy of the GNU Affero General Public License
23 * along with Linear Arrangement Library. If not, see <http://www.gnu.org/licenses/>.
24 *
25 * Contact:
26 *
27 * LluĂ­s Alemany Puig (lluis.alemany.puig@upc.edu)
28 * LQMC (Quantitative, Mathematical, and Computational Linguisitcs)
29 * CQL (Complexity and Quantitative Linguistics Lab)
30 * Jordi Girona St 1-3, Campus Nord UPC, 08034 Barcelona. CATALONIA, SPAIN
31 * Webpage: https://cqllab.upc.edu/people/lalemany/
32 *
33 * Ramon Ferrer i Cancho (rferrericancho@cs.upc.edu)
34 * LQMC (Quantitative, Mathematical, and Computational Linguisitcs)
35 * CQL (Complexity and Quantitative Linguistics Lab)
36 * Office 220, Omega building
37 * Jordi Girona St 1-3, Campus Nord UPC, 08034 Barcelona. CATALONIA, SPAIN
38 * Webpage: https://cqllab.upc.edu/people/rferrericancho/
39 *
40 ********************************************************************/
41
42#pragma once
43
44// C++ includes
45#include <ostream>
46
47// lal includes
48#include <lal/graphs/undirected_graph.hpp>
49#include <lal/graphs/directed_graph.hpp>
50#include <lal/graphs/rooted_tree.hpp>
51
52namespace lal {
53namespace graphs {
54
63inline std::ostream& operator<< (std::ostream& os, const undirected_graph& g)
64noexcept
65{
66 const auto N = g.get_num_nodes();
67 for (node u = 0; u < N; ++u) {
68 os << u << ":";
69 for (auto v : g.get_neighbors(u)) {
70 os << " " << v;
71 }
72 os << (u < N - 1 ? "\n" : "");
73 }
74 return os;
75}
76
85inline std::ostream& operator<< (std::ostream& os, const directed_graph& g)
86noexcept
87{
88 const auto N = g.get_num_nodes();
89 os << "out:" << "\n";
90 for (node u = 0; u < N; ++u) {
91 os << u << ":";
92 for (auto v : g.get_out_neighbors(u)) {
93 os << " " << v;
94 }
95 os << (u < N - 1 ? "\n" : "");
96 }
97 os << "\n" << "in:" << "\n";
98 for (node u = 0; u < N; ++u) {
99 os << u << ":";
100 for (auto v : g.get_in_neighbors(u)) {
101 os << " " << v;
102 }
103 os << (u < N - 1 ? "\n" : "");
104 }
105 return os;
106}
107
116inline std::ostream& operator<< (std::ostream& os, const rooted_tree& g)
117noexcept
118{
119 const auto N = g.get_num_nodes();
120 const std::string pad = (g.has_root() ? " " : "");
121 os << "out:" << "\n";
122 for (node u = 0; u < N; ++u) {
123 os << (g.has_root() and u == g.get_root() ? "*" : pad) << u << ":";
124 for (auto v : g.get_out_neighbors(u)) {
125 os << " " << v;
126 }
127 os << (u < N - 1 ? "\n" : "");
128 }
129 os << "\n" << "in:" << "\n";
130 for (node u = 0; u < N; ++u) {
131 os << (g.has_root() and u == g.get_root() ? "*" : pad) << u << ":";
132 for (auto v : g.get_in_neighbors(u)) {
133 os << " " << v;
134 }
135 os << (u < N - 1 ? "\n" : "");
136 }
137 return os;
138}
139
140} // -- namespace graphs
141} // -- namespace lal
Directed graph class.
Definition directed_graph.hpp:67
Rooted tree graph class.
Definition rooted_tree.hpp:109
Undirected graph class.
Definition undirected_graph.hpp:66
std::ostream & operator<<(std::ostream &os, const undirected_graph &g) noexcept
Standard output operator for undirected graphs.
Definition output.hpp:63
Main namespace of the library.
Definition basic_types.hpp:48
uint64_t node
Node type. See Node / Vertex page for further details.
Definition basic_types.hpp:51