diff options
Diffstat (limited to 'tiger-compiler/tests/good/queens.tig')
| -rw-r--r-- | tiger-compiler/tests/good/queens.tig | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/tiger-compiler/tests/good/queens.tig b/tiger-compiler/tests/good/queens.tig new file mode 100644 index 0000000..a19a781 --- /dev/null +++ b/tiger-compiler/tests/good/queens.tig @@ -0,0 +1,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 |
