Scientific Calculator

(public) vasilkadifeli/EightQueens

By vasilkadifeli Vasil Kadifeli

Eight Queens - Problem solution via recursion. Solves a board with size from 1x1 up to 10x10

Tagged: eight_queens printout recursion

// 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
};

spam? | offensive?

0 Comments

Sign in to leave a comment