|
CGRA-ME
|
Go to the source code of this file.
Functions | |
| template<typename Graph , typename InitialList , typename Visitor = DoNothingGraphVisitor<VertexID>> | |
| auto | breadthFirstVisit (Graph &&graph, const InitialList &initial_list, Visitor &&visitor={}) const |
| template<typename Graph , typename InitialList , typename VertexCoster , typename Visitor = DoNothingGraphVisitor<VertexID>> | |
| auto | dijkstraVisit (Graph &&graph, const InitialList &initial_list, VertexCoster &&vertex_coster, Visitor &&visitor={}) const |
| template<typename Graph , typename IsTarget , typename Visitor = DoNothingGraphVisitor<VertexID>, typename InitialList = std::vector<VertexID>> | |
| auto | wavedBreadthFirstVisit (Graph &&graph, const InitialList &initial_list, IsTarget &&is_target, Visitor &&visitor={}) const |
| template<typename Graph , typename Source , typename IsTarget , typename Visitor = DoNothingGraphVisitor<VertexID>> | |
| auto | depthFirstVisit (Graph &&graph, const Source &source, IsTarget &&is_target, Visitor &&visitor={}) const |
| auto breadthFirstVisit | ( | Graph && | graph, |
| const InitialList & | initial_list, | ||
| Visitor && | visitor = {} |
||
| ) | const |
A single-threaded breadth-first visit over graph, starting at the vertices in initial_list.
Definition at line 16 of file GraphAlgorithms_Searching.inl.
| auto depthFirstVisit | ( | Graph && | graph, |
| const Source & | source, | ||
| IsTarget && | is_target, | ||
| Visitor && | visitor = {} |
||
| ) | const |
A single-threaded depth-first visit of graph, starting at the vertex source, terminating if is_target evaluates to true on any vertex. is_target should be a unary functor that accepts a vertex as its only argument
An example follows, and see the tests for more: struct Graph { std::vector<std::vector<int>> fanout_lists; const std::vector<int>& fanout(int ndesc) const { return fanout_lists.at(ndesc); } } g { {{1}, {2,0}, {3,0}, {1,0}} };
struct Visitor : DoNothingGraphVisitor<int> { void onExamine(int ndesc) { std::cout << ndesc << ' '; } } v;
GraphAlgorithms<int> g_algos;
// this should print: 1 2 3 0 g_algos.depthFirstVisit(g, {1}, [](auto&&) { return false; }, v); // this should print: 1 2 g_algos.depthFirstVisit(g, {1}, [](auto&& n) { return n == 2; }, v);
Definition at line 320 of file GraphAlgorithms_Searching.inl.
| auto dijkstraVisit | ( | Graph && | graph, |
| const InitialList & | initial_list, | ||
| VertexCoster && | vertex_coster, | ||
| Visitor && | visitor = {} |
||
| ) | const |
A single-threaded visit in dijkstra's algorithm-order over graph, starting at the vertices in initial_list.
Definition at line 64 of file GraphAlgorithms_Searching.inl.
| auto wavedBreadthFirstVisit | ( | Graph && | graph, |
| const InitialList & | initial_list, | ||
| IsTarget && | is_target, | ||
| Visitor && | visitor = {} |
||
| ) | const |
A (optionally) parallel breadth-first visit of graph, starting at the vertices in initial_list, terminating if is_target evaluates to true on any vertex. is_target should be a unary functor that accepts a vertex as its only argument
Parallelism is achieved by splitting the current expansion wave into num_threads segments, and expanding those in separate threads. No threads are created if num_threads == 1. All visitor functions should be thread-safe when running with num_threads > 1
This function returns a fanin graph that includes all edges discovered. A fanin that is closer to the begin of the fanin was discovered at the same time or earlier in the search. So, if you want a BFS spanning tree, follow fanin.begin()
An example follows, and see the tests for more: struct Graph { std::vector<std::vector<int>> fanout_lists; const std::vector<int>& fanout(int ndesc) const { return fanout_lists.at(ndesc); } } g { {{1}, {2,0}, {3,0}, {1,0}} };
struct Visitor : DoNothingGraphVisitor<int> { void onExamine(int ndesc) { std::cout << ndesc << ' '; } } v;
GraphAlgorithms<int> g_algos;
// this should print: 1 2 0 3 g_algos.wavedBreadthFirstVisit(g, {1}, [](auto&&) { return false; }, v); // this should print: 1 2 g_algos.wavedBreadthFirstVisit(g, {1}, [](auto&& n) { return n == 2; }, v);
Definition at line 175 of file GraphAlgorithms_Searching.inl.
1.8.17