Scientific Calculator
vasilkadifeli/EightQueens
Eight Queens - Problem solution via recursion. Solves a board with size from 1x1 up to 10x10
Tagged:
// 8 QUEENS Problem Solved with Recursion
// Solves a board with size fro 1x1 up to 10x10
// call as : var printout = EightQueens(8);
// then go and look at var printout at the Variables window
var EightQueens = function(Bsize){
var board = [[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0]];
var solution = [];
var iteration = 0;
var TryQueen = function (board,row,N){
var col = 0;
var safe = false;
var r = 0;
var c = 0;
var i = 0;
var sum = 0;
var sol = "";
// alert(concat("at TryQueen(",string(row),")"));
iteration = iteration + 1;
// iteration > 25 ? error("stopped due to iteration limit") : 0 ;
row <= N ?
( col = 1;
while ( col <= N ) ->
( row == 1 ?
( safe = true ) :
( r = row-1;
c = col;
i = 1;
sum = 0;
while (r > 0) ->
( sum = sum + board[r -1][col -1];
c-i > 0 ? sum = sum + board[r -1][c-i -1] : 0;
c+i <= N ? sum = sum + board[r -1][c+i -1] : 0;
r=r-1;
i=i+1);
sum == 0 ? ( safe=true) : (safe=false) ;
);
safe ?
( board[row -1][col -1] = 1;
TryQueen(board,row+1,N);
board[row -1][col -1] = 0 ) : 0 ;
col = col +1;
);
) :
( r = 0; sol="";
while (r < N) ->
( c=0;
while (c < N) ->
( sol=concat(sol,string(board[r][c]));
c=c+1 );
sol=concat(sol,"|");
r=r+1);
push(solution,sol);
);
};
Bsize > 10 ? error("Board size cannot be greater than 10"):0;
TryQueen(board,1,Bsize);
solution
};
0 Comments
Sign in to leave a comment