Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
nested_dissection.h
Go to the documentation of this file.
1#ifndef ROUTING_KIT_NESTED_DISSECTION_H
2#define ROUTING_KIT_NESTED_DISSECTION_H
3
6
7#include <vector>
8#include <stdexcept>
9#include <functional>
10#include <string>
11
12namespace RoutingKit{
13
15 std::vector<unsigned>global_node_id;
16 std::vector<unsigned>first_out;
17 std::vector<unsigned>tail;
18 std::vector<unsigned>head;
19 std::vector<unsigned>back_arc;
20
21 unsigned node_count()const{
22 return global_node_id.size();
23 }
24
25 unsigned arc_count()const{
26 return tail.size();
27 }
28};
29
30GraphFragment make_graph_fragment(unsigned node_count, const std::vector<unsigned>&tail, const std::vector<unsigned>&head);
31
32std::vector<GraphFragment>decompose_graph_fragment_into_connected_components(GraphFragment fragment);
33
39
41
72
73CutSide inertial_flow(
74 const GraphFragment&fragment,
75 unsigned min_balance,
76 const std::vector<float>&latitude, const std::vector<float>&longitude,
77 const std::function<void(const std::string&)>&log_message = [](const std::string&){}
78);
79
80CutSide inertial_flow(
81 const GraphFragment&fragment,
82 const std::vector<float>&latitude, const std::vector<float>&longitude,
83 const std::function<void(const std::string&)>&log_message = [](const std::string&){}
84);
85
86BitVector derive_separator_from_cut(const GraphFragment&fragment, const BitVector&cut);
87
89 struct Node{
90 unsigned left_child;
91 unsigned right_sibling;
94 };
95
96 std::vector<Node>tree;
97 std::vector<unsigned>order;
98};
99
101 GraphFragment fragment,
102 const std::function<BitVector(const GraphFragment&)>&compute_separator,
103 const std::function<void(const std::string&)>&log_message = [](const std::string&){}
104);
105
106std::vector<unsigned>compute_nested_node_dissection_order(
107 GraphFragment fragment,
108 const std::function<BitVector(const GraphFragment&)>&compute_separator,
109 const std::function<void(const std::string&)>&log_message = [](const std::string&){}
110);
111
113 unsigned node_count,
114 const std::vector<unsigned>&tail, const std::vector<unsigned>&head,
115 const std::vector<float>&latitude, const std::vector<float>&longitude,
116 const std::function<void(const std::string&)>&log_message = [](const std::string&){}
117);
118
119} // RoutingKit
120
121#endif
122
const GraphFragment * fragment
unsigned get_current_flow_intensity() const
std::vector< unsigned > tail
unsigned node_count
std::vector< GraphFragment > decompose_graph_fragment_into_connected_components(GraphFragment fragment)
BitVector derive_separator_from_cut(const GraphFragment &fragment, const BitVector &cut)
std::vector< unsigned > compute_nested_node_dissection_order(GraphFragment fragment, const std::function< BitVector(const GraphFragment &)> &compute_separator, const std::function< void(const std::string &)> &log_message=[](const std::string &){})
std::vector< unsigned > compute_nested_node_dissection_order_using_inertial_flow(unsigned node_count, const std::vector< unsigned > &tail, const std::vector< unsigned > &head, const std::vector< float > &latitude, const std::vector< float > &longitude, const std::function< void(const std::string &)> &log_message=[](const std::string &){})
SeparatorDecomposition compute_separator_decomposition(GraphFragment fragment, const std::function< BitVector(const GraphFragment &)> &compute_separator, const std::function< void(const std::string &)> &log_message=[](const std::string &){})
void pick_smaller_side(CutSide &cut)
GraphFragment make_graph_fragment(unsigned node_count, const std::vector< unsigned > &tail, const std::vector< unsigned > &head)
CutSide inertial_flow(const GraphFragment &fragment, unsigned min_balance, const std::vector< float > &latitude, const std::vector< float > &longitude, const std::function< void(const std::string &)> &log_message=[](const std::string &){})
std::vector< unsigned > tail
std::vector< unsigned > head
std::vector< unsigned > first_out
std::vector< unsigned > back_arc
std::vector< unsigned > global_node_id