#!/usr/local/bin/perl -w my @c; for (;;){ $sol++; loop: init(); for $q (0..7){ loop2: $it++; $i = int 1+rand(8); $j = int 1+rand(8); if ($c[$i][$j]==1){ $it=0; tacha($i,$j); $queen[$sol][$q] = $i.$j; }elsif ($it>81*81){ goto loop; }else{ goto loop2; } } for $i (1..$sol-1){ $ok=0; for $j (0..7){ for $k (0..7){ $ok++ if ($queen[$i][$j] eq $queen[$sol][$k] ); if ($ok==8) { goto loop; } } } } print "$sol @{$queen[$sol]}\n"; } sub init{ for $i (1..8){ for $j (1..8){ $c[$i][$j]=1; } } $it=0; } sub tacha{ my ($i,$j) = @_; for $r (1..8){ $c[$r][$j]=0; } for $c (1..8){ $c[$i][$c]=0; } for $d (1..7){ if (defined $c[$i-$d][$j-$d]) { $c[$i-$d][$j-$d]=0; } if (defined $c[$i-$d][$j+$d]) { $c[$i-$d][$j+$d]=0; } if (defined $c[$i+$d][$j-$d]) { $c[$i+$d][$j-$d]=0; } if (defined $c[$i+$d][$j+$d]) { $c[$i+$d][$j+$d]=0; } } } __END__