【发布时间】:2017-05-31 13:01:44
【问题描述】:
我正在尝试在 perl 中编写 8 Queen 问题,但我似乎遇到了无法修复的无限循环。我认为问题出在皇后增量上,因为当我打印“$queen”时;在我的求解函数中,我得到的只是一堆 1。
#
# 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);
【问题讨论】:
-
另外:不要使用原型。他们不会做你认为他们会做的事。丢失
($)。
标签: perl