私はperlで8クイーンの問題をコードしようとしています。私は修正できない無限ループに陥っているようです。私は問題がクイーンインクリメントであると思います。なぜなら私が "$ queen"を印刷するときです。私の解決機能で私が得るのは1の束です。私のperlプログラムは無限ループ(クイーン8)
#
# implement 8 queen problem
#
my $size = 8;
my @answer =();
sub is_conflict($$){
my ($row, $queen) = @_;
for(my $i=0; $i<$queen; $i=$i+1){
my $temp = $answer[$i];
if (($temp eq $row) or #same row
($temp eq ($row - ($queen - $i))) or #same diagonal
($temp eq ($row + ($queen-$i)))){ #same diagonal
return 1; #return true
}
}
return 0; #return false
}
sub solve($){
my $queen = @_;
if($queen eq $size){
print "@answer\n";
@answer =();
}
else{
for(my $i=0; $i<$size; $i=$i+1){
if(is_conflict($i,$queen) eq 0){
push(@answer, $i);
solve($queen+1);
}
}
}
}
solve(0);
の1を言いたい:プロトタイプを使用しないでください。彼らはあなたが思うことはしません。 '($)'を失う。 – Sobrique