pub trait Graph {
type Node: Copy + Eq + Hash;
type Edge: Copy + Eq + Edge<Self::Node>;
Show 16 methods
// Required methods
fn nodes<'a>(&'a self) -> Box<dyn Iterator<Item = Self::Node> + 'a>;
fn out_edges<'a>(
&'a self,
u: &Self::Node,
) -> Box<dyn Iterator<Item = Self::Edge> + 'a>;
fn in_edges<'a>(
&'a self,
u: &Self::Node,
) -> Box<dyn Iterator<Item = Self::Edge> + 'a>;
// Provided methods
fn out_neighbors<'a>(
&'a self,
u: &Self::Node,
) -> Map<Box<dyn Iterator<Item = Self::Edge> + 'a>, fn(Self::Edge) -> Self::Node> { ... }
fn in_neighbors<'a>(
&'a self,
u: &Self::Node,
) -> Map<Box<dyn Iterator<Item = Self::Edge> + 'a>, fn(Self::Edge) -> Self::Node> { ... }
fn dfs<'a>(&'a self) -> Dfs<'a, Self> ⓘ { ... }
fn dfs_from<'a>(&'a self, root: &Self::Node) -> Dfs<'a, Self> ⓘ { ... }
fn has_path(&self, u: &Self::Node, v: &Self::Node) -> bool { ... }
fn tarjan(&self) -> Partition<Self> { ... }
fn weak_components(&self) -> Partition<Self> { ... }
fn doubled<'a>(&'a self) -> Doubled<'a, Self> { ... }
fn node_filtered<'a, F>(&'a self, predicate: F) -> NodeFiltered<'a, Self, F>
where F: Fn(&Self::Node) -> bool { ... }
fn edge_filtered<'a, F>(&'a self, predicate: F) -> EdgeFiltered<'a, Self, F>
where F: Fn(&Self::Node, &Self::Edge) -> bool { ... }
fn top_sort<'a>(&'a self) -> Option<Vec<Self::Node>> { ... }
fn linear_order<'a>(&'a self) -> Option<Vec<Self::Node>> { ... }
fn neighbor_set<'a, I: Iterator<Item = &'a Self::Node>>(
&self,
set: I,
) -> HashSet<Self::Node>
where Self::Node: 'a { ... }
}
Required Associated Types§
Required Methods§
fn nodes<'a>(&'a self) -> Box<dyn Iterator<Item = Self::Node> + 'a>
fn out_edges<'a>( &'a self, u: &Self::Node, ) -> Box<dyn Iterator<Item = Self::Edge> + 'a>
fn in_edges<'a>( &'a self, u: &Self::Node, ) -> Box<dyn Iterator<Item = Self::Edge> + 'a>
Provided Methods§
fn out_neighbors<'a>( &'a self, u: &Self::Node, ) -> Map<Box<dyn Iterator<Item = Self::Edge> + 'a>, fn(Self::Edge) -> Self::Node>
fn in_neighbors<'a>( &'a self, u: &Self::Node, ) -> Map<Box<dyn Iterator<Item = Self::Edge> + 'a>, fn(Self::Edge) -> Self::Node>
fn dfs<'a>(&'a self) -> Dfs<'a, Self> ⓘ
fn dfs_from<'a>(&'a self, root: &Self::Node) -> Dfs<'a, Self> ⓘ
fn has_path(&self, u: &Self::Node, v: &Self::Node) -> bool
fn tarjan(&self) -> Partition<Self>
fn weak_components(&self) -> Partition<Self>
Sourcefn doubled<'a>(&'a self) -> Doubled<'a, Self>
fn doubled<'a>(&'a self) -> Doubled<'a, Self>
Returns the graph that has edges in both directions for every edge that this graph has in one direction.
Sourcefn node_filtered<'a, F>(&'a self, predicate: F) -> NodeFiltered<'a, Self, F>
fn node_filtered<'a, F>(&'a self, predicate: F) -> NodeFiltered<'a, Self, F>
Returns the subgraph of this graph that is induced by the set of nodes for which
predicate
returns true
.
Sourcefn edge_filtered<'a, F>(&'a self, predicate: F) -> EdgeFiltered<'a, Self, F>
fn edge_filtered<'a, F>(&'a self, predicate: F) -> EdgeFiltered<'a, Self, F>
Returns the subgraph of this graph containing all the edges for which the predicate returns true.
Sourcefn top_sort<'a>(&'a self) -> Option<Vec<Self::Node>>
fn top_sort<'a>(&'a self) -> Option<Vec<Self::Node>>
If this graph is acyclic, returns a topological sort of the vertices. Otherwise, returns
None
.
fn linear_order<'a>(&'a self) -> Option<Vec<Self::Node>>
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.