001      /*    Author Malte Pagel    */
002      
003      
var cols 8;
004                      
005      
document.write("<center><table border='1'>");
006      for ( var 
row_count 0row_count colsrow_count++ ) {
007          
document.write("<tr>");
008          for ( var 
col_count 0col_count colscol_count++ ) {
009              
document.write("<td");
010              if ( !
col_count )
011                  
document.write(" height='40px'");
012              if ( (
row_count col_count) %!= )
013                  
document.write(" class='dark_cell'");
014              
document.write(">");
015              
document.write("<div id='cell_" + (row_count cols col_count)
016                  + 
"' class='table_cell' onclick='set_given_queen(" row_count ", " col_count ")'>&nbsp;</div>");
017              
document.write("</td>");
018          }
019          
document.write("</tr>");
020      }
021      
document.write("</table></center>");
022      
023      var 
filled_columns = [];
024      var 
given_col = -1;
025      var 
tries_to_set 0;
026      var 
i;
027      
028      
029      function 
is_possible (colrow) {                    
030          for ( var 
0coli++ ) {
031              if ( 
== col || filled_columns[i] < )
032                  continue;
033      
034              if ( 
filled_columns[i] == row )
035                  return 
0;
036      
037              if ( 
Math.abs(row filled_columns[i]) == Math.abs(col i) )
038                  return;
039          }
040      
041          return 
1;
042      }
043      
044      function 
recursive_queen_search (col) {
045      
046          for ( var 
0colsi++ ) {
047              if ( 
col == given_col && != filled_columns[given_col] )
048                  continue;
049      
050              
tries_to_set++;
051      
052              if ( !
is_possible(coli) )
053                  continue;
054      
055              
filled_columns[col] = i;
056      
057              if ( 
col == (cols 1) || recursive_queen_search(col 1) )
058                  return 
1;
059          }
060      
061          if ( 
col != given_col )
062              
filled_columns[col] = -1;
063          return 
0;
064      }
065      
066      function 
show_queens () {
067          var 
ifield;
068          for ( 
0colsi++ ) {
069              if ( 
filled_columns[i] < )
070                  continue;
071              
field filled_columns[i] * cols i;
072              
iD("cell_" field).innerHTML "Q";
073          }
074      
075          for ( 
0< (cols cols); i++ )
076              
iD("cell_" i).style.cursor "default";
077      
078          var 
the_tries = (tries_to_set 999) ? tries_to_set "&nbsp;" tries_to_set;
079      
080          
debug"*******************************************" );
081          
debug"* First found solution, " the_tries " tries needed *" );
082          
debug"*******************************************" );
083      }
084      
085      function 
set_given_queen (rowcol) {
086          if ( 
given_col >= )
087              return;
088      
089          
given_col col;
090          
filled_columns[col] = row;
091      
092          for ( var 
0< (cols cols); i++ )
093              
iD("cell_" i).style.cursor "wait";
094      
095          
iD("cell_" + (row cols col)).parentNode.style.border "thin solid #FF8000";
096      
097          
iD("instruction").innerHTML "";
098      
099          if ( 
recursive_queen_search(0) )
100              
show_queens();
101          else {
102              
debug"**********************************" );
103              
debug"* Could not find solution, sorry *" );
104              
debug"**********************************" );
105          }
106      }
107      
108      for ( 
0colsi++ )
109          
filled_columns[i] = -1;
110