Skip to content

Commit 9f3deb3

Browse files
committed
Use an indexed vec for visited.
1 parent de18fb1 commit 9f3deb3

1 file changed

Lines changed: 5 additions & 3 deletions

File tree

src/bfs.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,20 +26,22 @@ impl Graph {
2626
/// Naive BFS implementation using Vec as a queue (intentionally slow)
2727
/// Returns the order in which nodes were visited
2828
pub fn bfs_naive(graph: &Graph, start: usize) -> Vec<usize> {
29-
let mut visited = HashSet::new();
29+
let mut visited = Vec::from_iter((0..graph.num_nodes()).map(|_| false));
3030
let mut queue = VecDeque::with_capacity(1024);
3131
let mut result = Vec::with_capacity(graph.num_nodes());
3232

3333
queue.push_back(start);
34-
visited.insert(start);
34+
visited[start] = true;
3535

3636
while !queue.is_empty() {
3737
let node = queue.pop_front().unwrap();
3838
result.push(node);
3939

4040
if let Some(neighbors) = graph.adjacency.get(node) {
4141
for &neighbor in neighbors {
42-
if visited.insert(neighbor) {
42+
let prev = visited[neighbor];
43+
visited[neighbor] = true;
44+
if prev {
4345
queue.push_back(neighbor);
4446
}
4547
}

0 commit comments

Comments
 (0)