我的perl程序有一个无限循环(8个大号)

时间:2017-05-31 04:32:03

标签: perl

我正在尝试在perl中编写8皇后问题,而我似乎遇到了无法修复的无限循环。我认为问题在于女王的增量,因为当我打印“$ 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);

1 个答案:

答案 0 :(得分:3)

my $queen = @_几乎肯定不是你的意思。

my $var = @_ evaluates @_ in scalar context,为您提供@_的大小,而不是@_的第一个元素。在您的计划中,您始终将值1分配给$queen

相反,你想说一个

my ($queen) = @_;     # list context, assigns first element of @_
my $queen = shift @_; # extract first element from @_
my $queen = shift;    # inside a sub, same as  shift @_