summaryrefslogtreecommitdiff
path: root/tiger-compiler/tests/good/queens.tig
blob: a19a78102efad242da28cd914cddffa22acaa3fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/* A program to solve the N-queens problem */

let
    var N := 5

    type intArray = array of int

    var row := intArray [ N ] of 0
    var col := intArray [ N ] of 0
    var diag1 := intArray [N+N-1] of 0
    var diag2 := intArray [N+N-1] of 0

    function printboard() =
       (for i := 0 to N-1
         do (for j := 0 to N-1
              do print(if col[i]=j then " O" else " .");
             print("\n"));
         print("\n"))

    function try(c : int) =
( /*  for i := 0 to c do print("."); print("\n"); flush();*/
     if c=N
     then printboard()
     else for r := 0 to N-1
           do if row[r]=0 & diag1[r+c]=0 & diag2[r+N-1-c]=0
                   then (row[r] :=1; diag1[r+c] :=1; diag2[r+N-1-c] :=1;
                         col[c] :=r;
                         try(c+1);
                         row[r] :=0; diag1[r+c] :=0; diag2[r+N-1-c] :=0)

)
 in try(0)
end