18namespace spanning_tree {
24 template<
typename TGraph,
typename TNode>
33 template<
typename TNode,
typename TWeight>
42 template<
typename TNode,
typename TWeight>
43 inline static void init(JarnikPrim::Data<TNode, TWeight> &data,
const TNode &
start);
49template<
typename TGraph,
typename TNode>
51 using weight_type =
typename TGraph::edge_type::weight_type;
54 Data<TNode, weight_type> data;
59 while (!data.queue.empty()) {
60 TNode n = data.queue.begin()->second;
61 data.queue.erase(data.queue.begin());
64 auto search = data.p.find(n);
65 if (search != data.p.end()) {
66 res.addEdge(search->second, n, data.g.at(n));
69 for (
const auto &s_edge:
graph.successorEdges(n)) {
73 weight_type gscore = s_edge.weight();
76 auto search_d = data.g.find(s);
79 if (search_d == data.g.end() || search_d->second > gscore) {
81 auto search_q = data.queue.find(
ext::make_pair(search_d->second, s));
82 if (search_q != data.queue.end()) {
84 data.queue.erase(search_q);
88 data.p.insert_or_assign(s, n);
99template<
typename TNode,
typename TWeight>
100void JarnikPrim::init(JarnikPrim::Data<TNode, TWeight> &data,
const TNode &
start) {
Class extending the map class from the standard library. Original reason is to allow printing of the ...
Definition: map.hpp:48
static TNode const & other(const TEdge &e, const TNode &n)
Definition: JarnikPrim.hpp:20
static TGraph findSpanningTree(const TGraph &graph, const TNode &start)
Definition: JarnikPrim.hpp:50
return res
Definition: MinimizeByPartitioning.h:145
constexpr auto make_pair(T1 &&x, T2 &&y)
Definition: pair.hpp:79
Definition: ReconstructPath.hpp:14
void start(measurements::stealth_string name, measurements::Type type)
Definition: measurements.cpp:14