Rumah  >  Artikel  >  hujung hadapan web  >  Pelaksanaan JavaScript bagi N Queens algoritma masalah penyelesaian teka-teki kemahiran_javascript

Pelaksanaan JavaScript bagi N Queens algoritma masalah penyelesaian teka-teki kemahiran_javascript

WBOY
WBOYasal
2016-05-16 16:23:521638semak imbas

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:

Salin kod Kod adalah seperti berikut:

/**
 * Dicipta oleh cshao pada 28/12/14.
 */

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 Jika (nQueens[row] === undefined) {
nQueens[row] = [];
}

untuk (var col=0; col Jika (nQueens[row][col] === 0) {
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 nQueens[row][col] = undefined;
}
}

fungsi ialahQueenValid(nQueens, row, col) {
untuk (var i=0; i Jika (nQueens[row][i] == 1) {
Kembalikan palsu;
}
}
untuk (var j=1; j jika (nQueens[row-j][col]==1 || (nQueens[row-j][col-j]!=undefined && nQueens[row-j][col-j]==1) || ( nQueens[row-j][col j]!=undefined && nQueens[row-j][col j]==1)) {
Kembalikan palsu;
}
}
kembali benar;
}

fungsi printQueens(queens) {
untuk (baris var=0; baris var rowText = '';
untuk (var col=0; col Jika (queens[row][col]===undefined) {
Ratu[baris][col] = 0;
}
rowText = rowText queens[row][col] ' ';
}
console.log(rowText);
}
}

var queens = getNQueens(8);
printQueens(queens);

Keputusan

Salin kod Kod adalah seperti berikut:

1  0  0  0  0  0  0  0 
0  0  0  0  1  0  0  0 
0  0  0  0  0  0  0  1 
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  1  0  0  0  0
Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn