solve_nqueens/
solve_nqueens.rs1fn main() -> Result<(), Box<dyn std::error::Error>> {
6 let source = r#"
8 int: n = 4;
9 array[1..n] of var 1..n: queens;
10 constraint alldifferent(queens);
11 solve satisfy;
12 "#;
13
14 println!("Parsing MiniZinc model...");
15 let ast = zelen::parse(source)?;
16 println!("Parsed {} items", ast.items.len());
17
18 println!("\nTranslating to Selen Model...");
19 let translated = zelen::Translator::translate_with_vars(&ast)?;
20 println!("Translation successful!");
21
22 println!("\nSolving...");
23 match translated.model.solve() {
24 Ok(solution) => {
25 println!("✓ Solution found!");
26
27 if let Some(queens) = translated.int_var_arrays.get("queens") {
29 print!("\nQueens array: [");
30 for (i, var_id) in queens.iter().enumerate() {
31 if i > 0 { print!(", "); }
32 match solution[*var_id] {
33 selen::variables::Val::ValI(val) => print!("{}", val),
34 _ => print!("?"),
35 }
36 }
37 println!("]");
38
39 println!("\nInterpretation: Queen in row i is placed in column queens[i]");
40 }
41
42 println!("\nSolve stats: {} propagations, {} nodes, {:?}",
43 solution.stats.propagation_count,
44 solution.stats.node_count,
45 solution.stats.solve_time
46 );
47 }
48 Err(e) => {
49 println!("No solution found: {:?}", e);
50 }
51 }
52
53 Ok(())
54}