use std::collections::VecDeque;
use ahash::AHashSet;
use crate::{
HyperedgeTrait,
Hypergraph,
VertexIndex,
VertexTrait,
errors::HypergraphError,
};
impl<V, HE> Hypergraph<V, HE>
where
V: VertexTrait,
HE: HyperedgeTrait,
{
pub fn get_bfs(&self, from: VertexIndex) -> Result<Vec<VertexIndex>, HypergraphError<V, HE>> {
self.get_internal_vertex(from)?;
let mut visited: AHashSet<VertexIndex> = AHashSet::new();
let mut queue: VecDeque<VertexIndex> = VecDeque::new();
let mut result: Vec<VertexIndex> = Vec::new();
visited.insert(from);
queue.push_back(from);
while let Some(current) = queue.pop_front() {
result.push(current);
for neighbor in self.get_adjacent_vertices_from(current)? {
if visited.insert(neighbor) {
queue.push_back(neighbor);
}
}
}
Ok(result)
}
}