谜题
N皇后问题。将N个皇后放置在NxN的国际象棋棋盘上,其中没有任何两个皇后处于同一行、同一列或同一对角线上,以使得它们不能互相攻击。
策略
回溯法。
JavaScript解
以8皇后问题为例:
function getNQueens(order) { if (order < 4) { console.log('N Queens problem apply for order bigger than 3'); return; }
var nQueens = [];
var backTracking = false;
rowLoop:
for (var row=0; row for (var col=0; col
if (isQueenValid(nQueens,row,col)) {
continue rowLoop;
} else if (col == order-1) {
backTracking = true;
resetRow(nQueens,row);
row = row - 2;
continue rowLoop;
} else {
nQueens[row][col] = 0;
continue;
};
}
}
return nQueens; }
function resetRow(nQueens,row) {
for (var col=0; col function isQueenValid(nQueens,col) {
for (var i=0; i function printQueens(queens) {
for (var row=0; row var queens = getNQueens(8);
printQueens(queens);