Teka-teki
Masalah N Queen. Letakkan N ratu pada papan catur NxN di mana tiada dua ratu berada dalam baris, lajur atau pepenjuru yang sama supaya mereka tidak boleh menyerang antara satu sama lain.
Strategi
Kaedah backtracking.
Penyelesaian JavaScript
Ambil masalah 8 Ratu sebagai contoh:
fungsi getNQueens(pesanan) {
jika (pesanan < 4) {
console.log('Masalah N Queens memohon untuk pesanan lebih besar daripada 3');
Kembali;
}
var nQueens = [];
var BackTracking = palsu;
rowLoop:
untuk (baris var=0; baris
nQueens[row] = [];
}
untuk (var col=0; col
Teruskan;
} else if (backTracking && nQueens[row][col] == 1) {
Jika (col === pesanan-1) {
resetRow(nQueens, order, row);
baris = baris - 2;
teruskan rowLoop;
}
nQueens[row][col] = 0;
BackTracking = palsu;
Teruskan;
}
nQueens[row][col] = 1;
Jika (isQueenValid(nQueens, row, col)) {
Teruskan rowLoop;
} else if (col == order-1) {
BackTracking = benar;
resetRow(nQueens, order, row);
baris = baris - 2;
Teruskan rowLoop;
} lain {
nQueens[row][col] = 0;
Teruskan;
};
}
}
kembalikan nQueens;
}
fungsi resetRow(nQueens, order, row) {
untuk (var col=0; col
}
}
fungsi ialahQueenValid(nQueens, row, col) {
untuk (var i=0; i
fungsi printQueens(queens) {
untuk (baris var=0; baris
untuk (var col=0; col
Ratu[baris][col] = 0;
}
rowText = rowText queens[row][col] ' ';
}
console.log(rowText);
}
}
var queens = getNQueens(8);
printQueens(queens);
Keputusan