pub struct TarjanScc<N> { /* private fields */ }
Expand description
A reusable state for computing the strongly connected components using Tarjan’s algorithm.
Implementations§
source§impl<N> TarjanScc<N>
impl<N> TarjanScc<N>
sourcepub fn run<G, F>(&mut self, g: G, f: F)where
G: IntoNodeIdentifiers<NodeId = N, NodeId = N, NodeId = N> + IntoNeighbors + NodeIndexable,
F: FnMut(&[N]),
N: Copy + PartialEq,
pub fn run<G, F>(&mut self, g: G, f: F)where
G: IntoNodeIdentifiers<NodeId = N, NodeId = N, NodeId = N> + IntoNeighbors + NodeIndexable,
F: FnMut(&[N]),
N: Copy + PartialEq,
[Generic] Compute the strongly connected components using Algorithm 3 in A Space-Efficient Algorithm for Finding Strongly Connected Components by David J. Pierce, which is a memory-efficient variation of Tarjan’s algorithm.
Calls f
for each strongly strongly connected component (scc).
The order of node ids within each scc is arbitrary, but the order of
the sccs is their postorder (reverse topological sort).
For an undirected graph, the sccs are simply the connected components.
This implementation is recursive and does one pass over the nodes.
sourcepub fn node_component_index<G>(&self, g: G, v: N) -> usize
pub fn node_component_index<G>(&self, g: G, v: N) -> usize
Returns the index of the component in which v has been assigned. Allows for using self as a lookup table for an scc decomposition produced by self.run().
Trait Implementations§
Auto Trait Implementations§
impl<N> RefUnwindSafe for TarjanScc<N>where
N: RefUnwindSafe,
impl<N> Send for TarjanScc<N>where
N: Send,
impl<N> Sync for TarjanScc<N>where
N: Sync,
impl<N> Unpin for TarjanScc<N>where
N: Unpin,
impl<N> UnwindSafe for TarjanScc<N>where
N: UnwindSafe,
Blanket Implementations§
source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U
T
ShaderType
for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist.source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Self
using data from the given World
.