55 lines
1.2 KiB
Text
55 lines
1.2 KiB
Text
|
|
global n = 4;
|
||
|
|
|
||
|
|
int n_queens(int row, int state) {
|
||
|
|
if (row >= n) {
|
||
|
|
for (var i = 0; i < n; i = i + 1; ) {
|
||
|
|
var cur = state >> 4 * i [&] 15;
|
||
|
|
for (var j = 0; j < n; j = j + 1; ) {
|
||
|
|
if (cur == j) {
|
||
|
|
print_string("*");
|
||
|
|
} else {
|
||
|
|
print_string("-");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
print_string("\n");
|
||
|
|
}
|
||
|
|
print_string("\n");
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
|
||
|
|
var total = 0;
|
||
|
|
for (var i = 0; i < n; i = i + 1; ) {
|
||
|
|
var ok = true;
|
||
|
|
for (var j = 1; j <= row; j = j + 1; ) {
|
||
|
|
var cur = state >> 4 * (j - 1) [&] 15;
|
||
|
|
if (cur == i | cur == i - j | cur == i + j) {
|
||
|
|
ok = false;
|
||
|
|
j = row;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (ok) {
|
||
|
|
total = total + n_queens(row + 1, state << 4 [|] i);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return total;
|
||
|
|
}
|
||
|
|
|
||
|
|
int atoi(string s) {
|
||
|
|
var ret = 0;
|
||
|
|
var arr = array_of_string(s);
|
||
|
|
for (var i = 0; i < arr[-1]; i = i + 1; ) {
|
||
|
|
ret = ret * 10 + arr[i] - 48;
|
||
|
|
}
|
||
|
|
return ret;
|
||
|
|
}
|
||
|
|
|
||
|
|
int program(int argc, string[] argv) {
|
||
|
|
if (argc >= 2) {
|
||
|
|
n = atoi(argv[1]);
|
||
|
|
}
|
||
|
|
|
||
|
|
print_int(n_queens(0, 0));
|
||
|
|
return 0;
|
||
|
|
}
|