19 lines
833 B
Plaintext
19 lines
833 B
Plaintext
/* translation of Fortran 77, return solutions as permutations */
|
|
|
|
queens(n) := block([a, i, j, m, p, q, r, s, u, v, w, y, z],
|
|
a: makelist(i, i, 1, n), s: a*0, u: makelist(0, i, 1, 4*n - 2),
|
|
m: 0, i: 1, r: 2*n - 1, w: [ ], go(L40), L30, s[i]: j, u[p]: 1,
|
|
u[q + r]: 1, i: i + 1, L40, if i > n then go(L80), j: i, L50,
|
|
z: a[i], y: a[j], p: i - y + n, q: i + y - 1, a[i]: y, a[j]: z,
|
|
if u[p] = 0 and u[q + r] = 0 then go(L30), L60, j: j + 1,
|
|
if j <= n then go(L50), L70, j: j - 1, if j = i then go(L90),
|
|
z: a[i], a[i]: a[j], a[j]: z, go(L70), L80, m: m + 1,
|
|
w: endcons(copylist(a), w), L90, i: i - 1, if i = 0 then go(L100),
|
|
p: i - a[i] + n, q: i + a[i] - 1, j: s[i], u[p]: 0, u[q + r]: 0,
|
|
go(L60), L100, w)$
|
|
|
|
queens(8); /* [[1, 5, 8, 6, 3, 7, 2, 4],
|
|
[1, 6, 8, 3, 7, 4, 2, 5],
|
|
...]] */
|
|
length(%); /* 92 */
|