Головоломка
N Проблема королевы. Поместите n Queens на шахматную доску в NXN, где нет двух королев в одном и том же ряду, в одном и том же столбце или в одной диагонали, чтобы они не могли атаковать друг друга.
Стратегия
Метод отступления.
JavaScript Solution
Возьмите вопрос 8 королевы в качестве примера:
Кода -копия выглядит следующим образом:
/**
* Создан Чао 28.12.14.
*/
функция getNqueens (order) {
if (order <4) {
console.log ('n Queens Проблема применить для заказа больше 3');
возвращаться;
}
var nqueens = [];
var BackTracking = false;
rowloop:
for (var row = 0; row <order; row ++) {
if (nqueens [row] === undefined) {
nqueens [row] = [];
}
для (var col = 0; col <order; col ++) {
if (nqueens [row] [col] === 0) {
продолжать;
} else if (BackTracking && nqueens [row] [col] == 1) {
if (col === order-1) {
Повторный (NQUENS, ORDER, ROW);
row = row - 2;
Продолжить Rowloop;
}
nqueens [row] [col] = 0;
BackTracking = false;
продолжать;
}
nqueens [ряд] [col] = 1;
if (isqueenvalid (nqueens, row, col)) {
Продолжить Rowloop;
} else if (col == order-1) {
BackTracking = true;
Повторный (NQUENS, ORDER, ROW);
row = row - 2;
Продолжить Rowloop;
} еще {
nqueens [row] [col] = 0;
продолжать;
};
}
}
вернуть nqueens;
}
функция повторно (nqueens, order, row) {
для (var col = 0; col <order; col ++) {
nqueens [row] [col] = не определен;
}
}
Функция isqueenvalid (nqueens, row, col) {
для (var i = 0; i <col; i ++) {
if (nqueens [row] [i] == 1) {
вернуть ложь;
}
}
for (var j = 1; j <row+1; j ++) {
if (nqueens [row-j] [col] == 1 || (nqueens [row-j] [col-j]! = undefined && nqueens [row-j] [col-j] == 1) || (nqueens [row-j] [col+j]! = undefined && [row-j] [col+j] == 1)) {
вернуть ложь;
}
}
вернуть истину;
}
функция printqueens (Queens) {
for (var row = 0; row <queens.length; row ++) {
var RowText = '';
для (var col = 0; col <queens.length; col ++) {
if (Queens [row] [col] === не определено) {
Queens [row] [col] = 0;
}
ROWTEXT = ROWTEXT + Queens [ROW] [COL] + '';
}
console.log (rowtext);
}
}
var Queens = getNqueens (8);
Printqueens (Queens);
результат
Кода -копия выглядит следующим образом:
1 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0 0
0 0 1 0 0 0 0 0
0 0 0 0 0 0 1 0
0 1 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0