use std::error::Error; use backtrack::problems::{BitQueens, NQueens}; use backtrack::solvers::{IterSolveCached, IterSolveNaive}; fn main() -> Result<(), Box> { let args: Vec = std::env::args().collect(); let usage = Err(format!( "Use: {} (defaults to `bit` up to usize width)", &args[0] ) .into()); let (n, bit) = match args.len() { 2 => { let n = args[1].parse()?; let bit = n <= BitQueens::max_n(); (n, bit) } 3 => { let n = args[1].parse()?; let bit = match &args[2][..] { "bin" => true, "int" => false, _ => return usage, }; (n, bit) } _ => return usage, }; if !bit { let n_queens = NQueens::new(n); eprintln!("n_queens.rs: {:?}", n_queens); let solver = IterSolveNaive::new(&n_queens); for solution in solver.into_iter() { println!("{:?}", solution); } } else { let bit_queens = BitQueens::new(n); eprintln!("bit_queens.rs: {:?}", bit_queens); let solver = IterSolveCached::new(&bit_queens); for solution in solver.into_iter() { println!("{:?}", solution); } } Ok(()) }