Sequoia
Loading...
Searching...
No Matches
DynamicGraphTraversalDetails.hpp
Go to the documentation of this file.
1
2// Copyright Oliver J. Rosten 2018. //
3// Distributed under the GNU GENERAL PUBLIC LICENSE, Version 3.0. //
4// (See accompanying file LICENSE.md or copy at //
5// https://www.gnu.org/licenses/gpl-3.0.en.html) //
7
8#pragma once
9
16
17#include <queue>
18#include <stack>
19
20namespace sequoia::maths::graph_impl
21{
22 template<class G>
23 requires dynamic_network<G> || dynamic_tree<G>
25 {
26 using bitset = std::vector<bool>;
27
28 [[nodiscard]]
29 static bitset make_bitset(const G& g)
30 {
31 return bitset(g.order(), false);
32 }
33 };
34
35 template<dynamic_network G>
36 struct traversal_traits_base<G, traversal_flavour::breadth_first>
37 {
38 using queue_type = std::queue<std::size_t>;
39
40 [[nodiscard]]
41 static auto get_container_element(const queue_type& q) { return q.front(); }
42 };
43
44 template<dynamic_network G>
45 struct traversal_traits_base<G, traversal_flavour::pseudo_depth_first>
46 {
47 using queue_type = std::stack<std::size_t>;
48
49 [[nodiscard]]
50 static auto get_container_element(const queue_type& s) { return s.top(); }
51 };
52
53 template<dynamic_network G, class Compare>
54 struct traversal_traits_base<G, traversal_flavour::priority, Compare>
55 {
56 using queue_type = std::priority_queue<std::size_t, std::vector<size_t>, Compare>;
57
58 [[nodiscard]]
59 static auto get_container_element(const queue_type& q) { return q.top(); }
60 };
61}
Meta-programming urilities and underlying function for graph traversals.
Definition: GraphTraversalDetails.hpp:263
Definition: GraphTraversalDetails.hpp:236