1#ifndef PBAT_GRAPH_BREADTHFIRSTSEARCH_H
2#define PBAT_GRAPH_BREADTHFIRSTSEARCH_H
12template <common::CIndex TIndex = Index>
13struct BreadthFirstSearch
18 BreadthFirstSearch() =
default;
23 BreadthFirstSearch(Eigen::Index n);
40 template <
class FVisit,
class TDerivedP,
class TDerivedAdj>
42 Eigen::DenseBase<TDerivedP>
const& ptr,
43 Eigen::DenseBase<TDerivedAdj>
const& adj,
52 Eigen::Vector<bool, Eigen::Dynamic>
visited;
56template <common::CIndex TIndex>
57inline BreadthFirstSearch<TIndex>::BreadthFirstSearch(Eigen::Index n)
62template <common::CIndex TIndex>
65 PBAT_PROFILE_NAMED_SCOPE(
"pbat.graph.BreadthFirstSearch.Reserve");
69template <common::CIndex TIndex>
70template <
class FVisit,
class TDerivedP,
class TDerivedAdj>
72 Eigen::DenseBase<TDerivedP>
const& ptr,
73 Eigen::DenseBase<TDerivedAdj>
const& adj,
77 PBAT_PROFILE_NAMED_SCOPE(
"pbat.graph.BreadthFirstSearch");
80 while (not
queue.empty())
89 auto kEnd = ptr[u + 1];
90 for (
auto k = kBegin; k < kEnd; ++k)
Concepts for common types.
Definition Adjacency.h:24
Profiling utilities for the Physics-Based Animation Toolkit (PBAT)
std::queue< IndexType > QueueType
Queue type used for BFS.
Definition BreadthFirstSearch.h:16
void Reserve(Eigen::Index n)
Reserve memory for n vertices.
Definition BreadthFirstSearch.h:63
Eigen::Index NumVertices() const
Get the number of vertices in the graph.
Definition BreadthFirstSearch.h:50
TIndex IndexType
Index type used in the breadth-first search.
Definition BreadthFirstSearch.h:15
QueueType queue
BFS search queue.
Definition BreadthFirstSearch.h:53
void operator()(Eigen::DenseBase< TDerivedP > const &ptr, Eigen::DenseBase< TDerivedAdj > const &adj, TIndex start, FVisit fVisit)
Perform depth-first search on the graph.
Definition BreadthFirstSearch.h:71
Eigen::Vector< bool, Eigen::Dynamic > visited
|# vertices| x 1 visited mask
Definition BreadthFirstSearch.h:52