[project @ 2003-07-31 10:48:50 by panne]
[ghc-base.git] / Text / ParserCombinators / Parsec / examples / tiger / queens.tig
1 /* A program to solve the 8-queens problem */
2
3 let
4     var N := 8
5
6     type intArray = array of int
7
8     var row := intArray [ N ] of 0
9     var col := intArray [ N ] of 0
10     var diag1 := intArray [N+N-1] of 0
11     var diag2 := intArray [N+N-1] of 0
12
13     function printboard() =
14        (for i := 0 to N-1
15          do (for j := 0 to N-1 
16               do print(if col[i]=j then " O" else " .");
17              print("\n"));
18          print("\n"))
19
20     function try(c:int) = 
21 (    if c=N
22      then printboard()
23      else for r := 0 to N-1
24        do if row[r]=0 & diag1[r+c]=0 & diag2[r+7-c]=0
25               then (row[r]:=1; diag1[r+c]:=1; diag2[r+7-c]:=1;
26                     col[c]:=r;
27                     try(c+1);
28                     row[r]:=0; diag1[r+c]:=0; diag2[r+7-c]:=0)
29 )
30  in try(0)
31 end
32