Skip to content

Commit 00aa93d

Browse files
committed
finish algorithm5, use bfs
1 parent f921409 commit 00aa93d

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

exercises/algorithm/algorithm5.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use std::collections::VecDeque;
88

99
// Define a graph
10+
#[derive(Debug)]
1011
struct Graph {
1112
adj: Vec<Vec<usize>>,
1213
}
@@ -31,10 +32,44 @@ impl Graph {
3132
//TODO
3233

3334
let mut visit_order = vec![];
35+
let mut q = VecDeque::new();
36+
37+
if start >= self.adj.len() {
38+
return visit_order;
39+
}
40+
41+
q.push_back(start);
42+
43+
while !q.is_empty() {
44+
if let Some(front) = q.pop_front() {
45+
// 取出队列中一个节点,访问其未访问过的节点
46+
visit_order.push(front);
47+
48+
for new_v in &self.adj[front] {
49+
if !visit_order.contains(&new_v) && !q.contains(&new_v) {
50+
q.push_back(*new_v);
51+
}
52+
}
53+
}
54+
}
55+
3456
visit_order
3557
}
3658
}
3759

60+
fn main() {
61+
let mut graph = Graph::new(5);
62+
graph.add_edge(0, 1);
63+
graph.add_edge(0, 4);
64+
graph.add_edge(1, 2);
65+
graph.add_edge(1, 3);
66+
graph.add_edge(1, 4);
67+
graph.add_edge(2, 3);
68+
graph.add_edge(3, 4);
69+
70+
let visited_order = graph.bfs_with_return(0);
71+
assert_eq!(visited_order, vec![0, 1, 4, 2, 3]);
72+
}
3873

3974
#[cfg(test)]
4075
mod tests {

0 commit comments

Comments
 (0)