RosettaCodeData/Task/N-queens-problem/Rust/n-queens-problem-3.rs

30 lines
698 B
Rust

extern crate itertools;
use itertools::Itertools;
fn main() {
const N: usize = 8;
let permutations = (0..N).permutations(N);
let solution_count = permutations
.filter(|p| {
let mut diag1 = [false; 2 * N - 1];
let mut diag2 = [false; 2 * N - 1];
for (i, &row) in p.iter().enumerate() {
if diag1[row + i] || diag2[N - 1 + row - i] {
return false; // Queens mutual threat
}
diag1[row + i] = true;
diag2[N - 1 + row - i] = true;
}
true // No Queens mutual threat
})
.count();
println!("{}", solution_count);
}