let results = [];
function valid(board, row, col) {
for(let iRow = 0; iRow < board.length; iRow++){
if(board[iRow][col] == "Q") {
return false
}
}
for (let m = row-1, n = col-1; m >= 0 && n >= 0; m--, n--) {
if(board[m][n] == "Q") {
return false
}
}
for (let x = row-1, y = col+1; x >= 0 && y < board.length; x--, y++) {
if(board[x][y] == "Q") {
return false
}
}
return true
};
function backTrace (board, row) {
if(board.length < row+1) {
let solutionBoard = new Array(board.length);
for(let index in board) {
// console.log(board[index])
solutionBoard[index] = board[index].slice(0);
}
// console.log("\n\n\n")
results.push(solutionBoard)
return
}
for(let col = 0; col < board.length; col++) {
if(valid(board, row, col)) {
board[row][col] = "Q"
backTrace(board, row+1)
board[row][col] = "+"
}
}
};
function queens(N) {
let board = new Array(N)
for(let i = 0; i < N; i ++){
board[i] = new Array(N)
for(let j = 0; j < N; j ++){
board[i][j] = "+"
}
}
backTrace(board, 0)
return results
};
function printSolutions(solutions) {
for(let solu in solutions) {
let board = solutions[solu];
for(let index in board) {
console.log(board[index])
}
console.log("\n a solution")
}
console.log("\n")
console.log(results.length + " solutions in total")
}
queens(8);
printSolutions(results)
// =================================================
// let results = [];
// function valid(board, row, col) {
// for(let iRow = 0; iRow < board.length; iRow++){
// if(board[iRow][col] == "Q") {
// return false
// }
// }
// for (let m = row-1, n = col-1; m >= 0 && n >= 0; m--, n--) {
// if(board[m][n] == "Q") {
// return false
// }
// }
// for (let x = row-1, y = col+1; x >= 0 && y < board.length; x--, y++) {
// if(board[x][y] == "Q") {
// return false
// }
// }
// return true
// };
// function backTrace (board, row) {
// if(board.length < row+1) {
// let solutionBoard = new Array(board.length);
// for(let index in board) {
// // console.log(board[index])
// solutionBoard[index] = board[index].slice(0);
// }
// // console.log("\n\n\n")
// results.push(solutionBoard)
// return true
// }
// for(let col = 0; col < board.length; col++) {
// if(valid(board, row, col)) {
// board[row][col] = "Q"
// if(backTrace(board, row+1)) {
// return true;
// }
// board[row][col] = "+"
// }
// }
// return false
// };
// function queens(N) {
// console.log(N + " queens")
// let board = new Array(N)
// for(let i = 0; i < N; i ++){
// board[i] = new Array(N)
// for(let j = 0; j < N; j ++){
// board[i][j] = "+"
// }
// }
// if(!backTrace(board, 0)) {
// console.log("No solution!")
// }
// return results
// };
// function printSolutions(solutions) {
// for(let solu in solutions) {
// let board = solutions[solu];
// for(let index in board) {
// console.log(board[index])
// }
// console.log("\n a solution")
// }
// console.log("\n")
// // console.log(results.length + " solutions in total")
// }
// queens(3);
// printSolutions(results)
console