Membingungkan
N Masalah Ratu. Tempatkan n ratu di papan catur di NXN, di mana tidak ada dua ratu yang berada di baris yang sama, di kolom yang sama, atau dalam diagonal yang sama sehingga mereka tidak dapat saling menyerang.
Strategi
Metode backtracking.
Solusi JavaScript
Ambil pertanyaan 8 ratu sebagai contoh:
Salinan kode adalah sebagai berikut:
/**
* Dibuat oleh Chao pada 12/28/14.
*/
fungsi getNqueens (pesanan) {
if (order <4) {
Console.log ('n Queens Masalah berlaku untuk pesanan lebih besar dari 3');
kembali;
}
var nqueens = [];
var backtracking = false;
Rowloop:
untuk (var row = 0; baris <order; row ++) {
if (nqueens [baris] === tidak terdefinisi) {
nqueens [baris] = [];
}
untuk (var col = 0; col <order; col ++) {
if (nqueens [baris] [col] === 0) {
melanjutkan;
} lain jika (backtracking && nqueens [baris] [col] == 1) {
if (col === order-1) {
resetrow (nqueens, order, row);
baris = baris - 2;
Lanjutkan Rowloop;
}
nqueens [baris] [col] = 0;
backtracking = false;
melanjutkan;
}
nqueens [baris] [col] = 1;
if (isqueenvalid (nqueens, row, col)) {
Lanjutkan Rowloop;
} lain jika (col == order-1) {
backtracking = true;
resetrow (nqueens, order, row);
baris = baris - 2;
Lanjutkan Rowloop;
} kalau tidak {
nqueens [baris] [col] = 0;
melanjutkan;
};
}
}
mengembalikan nqueens;
}
fungsi resetrow (nqueens, order, row) {
untuk (var col = 0; col <order; col ++) {
nqueens [baris] [col] = tidak terdefinisi;
}
}
fungsi isqueenvalid (nqueens, row, col) {
untuk (var i = 0; i <col; i ++) {
if (nqueens [baris] [i] == 1) {
mengembalikan false;
}
}
untuk (var j = 1; j <baris+1; j ++) {
if (nqueens [row-j] [col] == 1 || (nqueens [row-j] [col-j]! = tidak terdefinisi && nqueens [row-j] [col-j] == 1) || (nqueens [row-j] [col+j]! = Tidak terdefinisi && nqueens [Row-J] [col+j] ==) {nqueens nqueens [row-j] [col+j] ==) {nqueens [row-j] [col+j] ==) {nqueens [col+j] ==) {nqueens [col+j] ==) {col+j] =
mengembalikan false;
}
}
Kembali Benar;
}
fungsi printqueens (ratu) {
untuk (var row = 0; baris <queens.length; baris ++) {
var rowText = '';
untuk (var col = 0; col <queens.length; col ++) {
if (ratu [baris] [col] === tidak terdefinisi) {
ratu [baris] [col] = 0;
}
rowText = rowText + Queens [row] [col] + '';
}
console.log (rowText);
}
}
var queens = getnqueens (8);
printqueens (ratu);
hasil
Salinan kode adalah sebagai berikut:
1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 1 0 0
0 0 1 0 0 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 0 0 1 0 0 0 0