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

WBOY
Lepaskan: 2016-05-16 16:23:52
asal
1676 orang telah melayarinya

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
Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan