幅優先探索は、木構造で横に順番に探索していく。
木構造をプログラムで表現するには、各ノードの下のノードの番号を配列で持つようにする。
例えば 下のような木構造があった場合、
0
1 2
3 4 5 6
0は1, 2を子ノードとして持つので、[1, 2]
1は3, 4を子ノードとして持つので、[3, 4]
2は5, 6を子ノードとして持つので、[5, 6] となる。
use std::collections::VecDeque; struct Tree { node: Vec<[i32; 2]>, } fn main() { let tree = Tree { node: vec![[1, 2], [3, 4], [5, 6], [7, 8],[9, 10], [11, 12], [13, 14], [0, 0], [0, 0], [0, 0], [0, 0],[0, 0],[0, 0],[0, 0],[0, 0]]}; let mut data: VecDeque<i32> = [0].into(); while data.len() > 0 { let pos = data.pop_front(); println!("{:?} ", pos.unwrap()); for i in tree.node[pos.unwrap() as usize] { if i != 0 { data.push_back(i); } } } }
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.24s
Running `target/debug/rust`
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ノードのデータの表現の仕方が勉強になりますね。