-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNQueenSolver.js
More file actions
76 lines (63 loc) · 1.9 KB
/
NQueenSolver.js
File metadata and controls
76 lines (63 loc) · 1.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
(function(){
var nQueen;
var myMap;
var queenPositions;
var createKey = function( a , b ){
var curKey = "";
curKey += (+a);
for ( var i=0 ; i<b.length ; i++ ){
curKey += (+b[i]);
}
return curKey;
}
var isValidPosition = function(curX , curY , previousPositions){
var curLen = previousPositions.length;
for ( var i=0 ; i<curLen ; i++ ){
var nxtX = i;
var nxtY = (previousPositions[i]);
if ( curY == nxtY ) return false;
if ( Math.abs(curX - nxtX) == Math.abs(curY - nxtY) ) return false;
}
return true;
}
// Generates Valid Positions
// For number of queen < 11 can use string as second parameter
// to greatly reduce complexity
var generatePositions = function ( id , previousPositions ){
if (id == nQueen ) {
queenPositions.push(previousPositions);
return ;
}
var curKey = createKey(id,previousPositions);
if ( myMap[curKey] != undefined ) return ;
for ( var i=0 ; i<nQueen ; i++ ){
if ( isValidPosition( id , i , previousPositions ) ){
if ( nQueen >10 ){
previousPositions.push(i);
generatePositions( id+1 , previousPositions );
previousPositions.pop();
}
else generatePositions( id+1 , previousPositions + (+i) );
}
}
myMap[curKey] = true;
}
var display = function(validPositions,resultField ){
resultField.textContent = (+validPositions);
}
var loaderFunction = function(){
var submitButton = document.getElementById("myButton");
var inputField = document.getElementById("firstInput");
var resultField = document.getElementById("resultDisplayer");
var userData;
submitButton.addEventListener("click",function(){
userData = firstInput.value;
nQueen = userData;
queenPositions = [];
myMap = new Object();
generatePositions( 0 , nQueen>10?[]:"");
display( queenPositions.length , resultField );
});
};
window.onload = loaderFunction;
})();