note atcroft <p>I had oft run into the n-queens problem, but rarely with time to try it. (It was not one of the problems I had to solve during my CS classes.) After reading your post, I decided to try it (using Brute-Force, for now). My implementation is below, which I looped thru to run for n=(1..15). Because I just finished it, it is still running, but so far, for n=8, the time was about 6 minutes on a Dell Latitude C600. Enjoy. <code> #!/usr/bin/perl -w use strict; use vars qw(\$DEBUG); \$| = 1; \$DEBUG = 0; # According to http://www.schoolnet.ca/vp-pv/amof/e_queeI.htm, # the number of solutions for n = 1,2,...,15, # is 1, 0, 0, 2, 10, 4, 40, 92, 352, 724, 2680, 14200, 73712, 365596, 2279184. # my \$maxcells = 8; foreach my \$maxcells (1..15) { my \$solutions = 0; my \$stime = scalar(localtime(time())); \$solutions = &nqueens(\$maxcells); my \$etime = scalar(localtime(time())); print <<STATUS; N: \$maxcells Solutions found: \$solutions End time: \$etime Start time: \$stime STATUS } sub nqueens { my (\$maxcell) = @_; my @board = (0) x \$maxcell; my \$solution_count = 0; print("Test output: ", join('-', @board), "\n" x 2) if (\$DEBUG); until (\$board[\$maxcell]) { { my \$count = 0; \$board[\$count]++; while ((\$board[\$count] == \$maxcell) and (\$count < \$maxcell)) { \$board[\$count] = 0; \$count++; \$board[\$count]++; } my \$flag = 1; for (my \$a = 0; (\$a < (\$maxcell - 1)) and (\$flag); \$a++) { foreach my \$b ((\$a + 1) .. (\$maxcell - 1)) { if ((\$board[\$a] == \$board[\$b]) or (abs(\$board[\$a] - \$board[\$b]) == abs(\$a - \$b))) { \$flag = 0; last; } } } print(join('-', @board), "\n") if ((\$flag) and (\$DEBUG)); \$solution_count++ if (\$flag); } } return(\$solution_count); } </code> <p><b>Update (21 Sep 2002)</b>: <br> Ran the script in the background on a Duron 750, and in case anyone was interested, got the following results so far:<br> <table border=1> <tr> <td>&nbsp;N&nbsp;</td> <td>&nbsp;Solutions&nbsp;<br>found&nbsp;</td> <td>&nbsp;Ended&nbsp;</td> <td>&nbsp;Started&nbsp;</td> </tr> <tr> <td>&nbsp;1&nbsp;</td> <td>&nbsp;1&nbsp;</td> <td>&nbsp;Sun Sep 15 19:43:01 2002&nbsp;</td> <td>&nbsp;Sun Sep 15 19:43:01 2002&nbsp;</td> </tr> <tr> <td>&nbsp;2&nbsp;</td> <td>&nbsp;0&nbsp;</td> <td>&nbsp;Sun Sep 15 19:43:01 2002&nbsp;</td> <td>&nbsp;Sun Sep 15 19:43:01 2002&nbsp;</td> </tr> <tr> <td>&nbsp;3&nbsp;</td> <td>&nbsp;0&nbsp;</td> <td>&nbsp;Sun Sep 15 19:43:01 2002&nbsp;</td> <td>&nbsp;Sun Sep 15 19:43:01 2002&nbsp;</td> </tr> <tr> <td>&nbsp;4&nbsp;</td> <td>&nbsp;2&nbsp;</td> <td>&nbsp;Sun Sep 15 19:43:01 2002&nbsp;</td> <td>&nbsp;Sun Sep 15 19:43:01 2002&nbsp;</td> </tr> <tr> <td>&nbsp;5&nbsp;</td> <td>&nbsp;10&nbsp;</td> <td>&nbsp;Sun Sep 15 19:43:01 2002&nbsp;</td> <td>&nbsp;Sun Sep 15 19:43:01 2002&nbsp;</td> </tr> <tr> <td>&nbsp;6&nbsp;</td> <td>&nbsp;4&nbsp;</td> <td>&nbsp;Sun Sep 15 19:43:05 2002&nbsp;</td> <td>&nbsp;Sun Sep 15 19:43:01 2002&nbsp;</td> </tr> <tr> <td>&nbsp;7&nbsp;</td> <td>&nbsp;40&nbsp;</td> <td>&nbsp;Sun Sep 15 19:43:51 2002&nbsp;</td> <td>&nbsp;Sun Sep 15 19:43:05 2002&nbsp;</td> </tr> <tr> <td>&nbsp;8&nbsp;</td> <td>&nbsp;92&nbsp;</td> <td>&nbsp;Sun Sep 15 19:59:45 2002&nbsp;</td> <td>&nbsp;Sun Sep 15 19:43:51 2002&nbsp;</td> </tr> <tr> <td>&nbsp;9&nbsp;</td> <td>&nbsp;352&nbsp;</td> <td>&nbsp;Mon Sep 16 01:40:22 2002&nbsp;</td> <td>&nbsp;Sun Sep 15 19:59:45 2002&nbsp;</td> </tr> <tr> <td>&nbsp;10&nbsp;</td> <td>&nbsp;724&nbsp;</td> <td>&nbsp;Fri Sep 20 09:21:41 2002&nbsp;</td> <td>&nbsp;Mon Sep 16 01:40:22 2002&nbsp;</td> </tr> </table> 196095 196128