RosettaCodeData/Task/Permutations/Rust/permutations-2.rust

19 lines
522 B
Text
Raw Permalink Normal View History

2017-09-23 10:01:46 +02:00
use std::collections::VecDeque;
2018-06-22 20:57:24 +00:00
2017-09-23 10:01:46 +02:00
fn permute<T, F: Fn(&[T])>(used: &mut Vec<T>, unused: &mut VecDeque<T>, action: &F) {
if unused.is_empty() {
action(used);
} else {
for _ in 0..unused.len() {
used.push(unused.pop_front().unwrap());
permute(used, unused, action);
unused.push_back(used.pop().unwrap());
}
}
}
fn main() {
2018-06-22 20:57:24 +00:00
let mut queue = (1..4).collect::<VecDeque<_>>();
permute(&mut Vec::new(), &mut queue, &|perm| println!("{:?}", perm));
2017-09-23 10:01:46 +02:00
}