Generating permutations
Next we consider the problem of generating all permutations of a set of $n$ elements. For example, the permutations of $\{0,1,2\}$ are $(0,1,2)$, $(0,2,1)$, $(1,0,2)$, $(1,2,0)$, $(2,0,1)$ and $(2,1,0)$.
Like subsets, permutations can be generated
using recursion.
The following function .search() goes
through the permutations of the set $\{0,1,\ldots,n-1\}$.
The function builds a vector permutation
that contains the permutation,
and the search begins when the function is called with parameters:
#![allow(unused)]
fn main() {
fn search(permutation: &mut Vec<usize>, n: usize, chosen: &mut Vec<bool>){
if permutation.len() == n{
// process permutation
println!("{permutation:?}");
} else {
for i in 0..n{
if chosen[i] {continue}
chosen[i] = true;
permutation.push(i);
search(permutation, n, chosen);
chosen[i] = false;
permutation.pop();
}
}
}
let mut permutation = Vec::new();
let n = 4;
let mut chosen = vec![false;n];
println!("Permutation of {n}:");
search(&mut permutation, n, &mut chosen);
}