Puzzle
N Königinproblem. Platzieren Sie N Queens auf eine Schachbrett in NXN, in der sich keine zwei Königinnen in derselben Zeile befinden, in derselben Spalte oder in derselben Diagonale, damit sie sich nicht gegenseitig angreifen können.
Strategie
Backtracking -Methode.
JavaScript -Lösung
Nehmen Sie die Frage der 8 Königin als Beispiel:
Die Codekopie lautet wie folgt:
/**
* Erstellt von Chao am 28.12.14.
*/
Funktion getnqueens (order) {
if (order <4) {
console.log ('n Queens Problem für Bestellung, die größer als 3' gilt);
zurückkehren;
}
var nqueens = [];
var backtracking = false;
Rowloop:
für (var row = 0; Zeile <order; row ++) {
if (nqueens [row] === undefined) {
nqueens [row] = [];
}
für (var col = 0; col <order; col ++) {
if (nqueens [row] [col] === 0) {
weitermachen;
} else if (backtracking && nqueens [row] [col] == 1) {
if (col === order-1) {
Reserve (Nqueens, Ordnung, Reihe);
Row = Row - 2;
Weiter Rowloop;
}
nqueens [row] [col] = 0;
Backtracking = false;
weitermachen;
}
nqueens [row] [col] = 1;
if (isqueenvalid (nqueens, row, col)) {
Weiter Rowloop;
} else if (col == order-1) {
Backtracking = true;
Reserve (Nqueens, Ordnung, Reihe);
Row = Row - 2;
Weiter Rowloop;
} anders {
nqueens [row] [col] = 0;
weitermachen;
};
}
}
kehren Nqueens zurück;
}
Funktion Rescrow (Nqueens, Reihenfolge, Zeile) {
für (var col = 0; col <order; col ++) {
nqueens [row] [col] = undefiniert;
}
}
Funktion isqueenvalid (Nqueens, Row, col) {
für (var i = 0; i <col; i ++) {
if (nqueens [row] [i] == 1) {
false zurückgeben;
}
}
für (var j = 1; j <row+1; j ++) {
if (nqueens [row-j] [col] == 1 || (nqueens [row-j] [col-j]!
false zurückgeben;
}
}
zurückkehren;
}
Funktion printqueens (Queens) {
für (var row = 0; Zeile <queens.length; Zeile ++) {
var rowText = '';
für (var col = 0; col <queens.length; col ++) {
if (queens [row] [col] === undefined) {
Queens [Row] [col] = 0;
}
rowText = rowText + queens [row] [col] + '';
}
console.log (rowText);
}
}
var queens = getnqueens (8);
Printqueens (Queens);
Ergebnis
Die Codekopie lautet wie folgt:
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 1
0 0 0 0 0 0 1 0 0 0 0
0 0 1 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