Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit d69a857

Browse files
Merge pull request ignacio-chiazzo#7 from ignacio-chiazzo/n-queens
Added n queens problem
2 parents 0f71258 + 9fd3167 commit d69a857

File tree

2 files changed

+94
-0
lines changed

2 files changed

+94
-0
lines changed

Main.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
var permutationWithoutDuplicates = require("./PermutationsWithoutDuplicates.js");
33
var permutationWithDuplicates = require("./PermutationsWithDuplicates.js");
44
var subsets = require("./Subsets.js");
5+
var nQueens = require("./NQueens.js");
56
var uniquePaths = require("./UniquePaths.js");
67
var floodFill = require("./FloodFill.js")
78

@@ -10,5 +11,6 @@ var floodFill = require("./FloodFill.js")
1011
// permutationWithoutDuplicates.main();
1112
// permutationWithDuplicates.main();
1213
// subsets.main();
14+
// nQueens.main();
1315
// uniquePaths.main();
1416
// floodFill.main();

NQueens.js

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
/* https://leetcode.com/problems/n-queens/description/
2+
3+
Example:
4+
5+
Input: 4
6+
Output: [
7+
[".Q..", // Solution 1
8+
"...Q",
9+
"Q...",
10+
"..Q."],
11+
12+
["..Q.", // Solution 2
13+
"Q...",
14+
"...Q",
15+
".Q.."]
16+
]
17+
Explanation: There exist two distinct solutions to the 4-queens puzzle as shown above.
18+
*/
19+
20+
/**
21+
* @param {number} n
22+
* @return {string[][]}
23+
*/
24+
var solveNQueens = function(n) {
25+
var sol = [];
26+
solveNQueensAux(n, 0, new Set(), new Set(), new Set(), [], sol);
27+
return parseSolutions(sol, n);
28+
};
29+
30+
var solveNQueensAux = function(n, row, diagonalDiffs, diagonalSums, cols, currentSol, sol) {
31+
if(row == n) {
32+
sol.push(currentSol);
33+
return;
34+
}
35+
36+
for(var i = 0; i < n; i++) {
37+
const diagonalDiff = i - row;
38+
const diagonalSum = i + row;
39+
if(!diagonalDiffs.has(diagonalDiff) && !cols.has(i) && !diagonalSums.has(diagonalSum)) {
40+
diagonalDiffs.add(diagonalDiff);
41+
diagonalSums.add(diagonalSum);
42+
cols.add(i);
43+
solveNQueensAux(n, row + 1, diagonalDiffs, diagonalSums, cols, [...currentSol, ...[[row, i]]], sol);
44+
cols.delete(i);
45+
diagonalDiffs.delete(diagonalDiff);
46+
diagonalSums.delete(diagonalSum);
47+
}
48+
}
49+
return;
50+
}
51+
52+
var parseSolutions = function(sols, n) {
53+
var matrixes = [];
54+
for(var i = 0; i < sols.length; i++) {
55+
var sol = sols[i];
56+
var matrix = [];
57+
for(var row = 0; row < n; row++) {
58+
matrix[row] = []
59+
const queenPos = sol[row];
60+
for(var col = 0; col < n; col++) {
61+
matrix[row] += (queenPos[1] == col) ? "Q" : ".";
62+
}
63+
}
64+
65+
matrixes.push(matrix);
66+
}
67+
68+
return matrixes;
69+
}
70+
71+
var printMatrixes = function(matrixes, n) {
72+
console.log("Start solution of n: " + n);
73+
for(var i = 0; i < matrixes.length; i++) {
74+
printMatrix(matrixes[i]);
75+
}
76+
console.log("End solution of n: " + n);
77+
}
78+
79+
var printMatrix = function(matrix) {
80+
console.log("------------");
81+
for(var i = 0; i < matrix.length; i++) {
82+
console.log(matrix[i]);
83+
}
84+
console.log("------------");
85+
}
86+
87+
var main = function(n) {
88+
printMatrixes(solveNQueens(4), 4);
89+
printMatrixes(solveNQueens(5), 5);
90+
printMatrixes(solveNQueens(6), 6);
91+
}
92+
main();

0 commit comments

Comments
 (0)