第三题
解数独
答案为
@sd =(['5','3','.','.','7','.','.','.','.'],
['6','.','.','1','9','5','.','.','.'],
['.','9','8','.','.','.','.','6','.'],
['8','.','.','.','6','.','.','.','3'],
['4','.','.','8','.','3','.','.','1'],
['7','.','.','.','2','.','.','.','6'],
['.','6','.','.','.','.','2','8','.'],
['.','.','.','4','1','9','.','.','5'],
['.','.','.','.','8','.','.','7','9']
);
LOOP:
undef @si;
undef @sj;
undef @sk;
for($i=0;$i<=8;$i++){
for($j=0;$j<=8;$j++){
if($sd[$i][$j] eq '.'){
@v = &V($i,$j);
$k = $#v;
push(@si,$i);
push(@sj,$j);
push(@sk,$k);
if($k == 0){
$sd[$i][$j] = $v[0];
goto LOOP;
}
}
}
}
for($i=0;$i<=8;$i++){
for($j=0;$j<=8;$j++){
print"$sd[$i][$j] ";
}
print"\n";
}
sub V{
my @v;
my $i = $_[0];
my $j = $_[1];
for($n = 1;$n<=9;$n++){
$x = &X($i,$n);
$y = &Y($j,$n);
$xy = &XY($i,$j,$n);
# print"$i $j $x $y $xy $n\n";
if($x eq 'no' && $y eq 'no' && $xy eq 'no'){
push(@v,$n);
}
}
return @v;
}
sub X{
$va = 'no';
for($o=0;$o<=8;$o++){
if($_[1] eq $sd[$_[0]][$o]){
$va = "yes";
last;
}
}
return $va;
}
sub Y{
$va = 'no';
for($o=0;$o<=8;$o++){
if($_[1] eq $sd[$o][$_[0]]){
$va = "yes";
last;
}
}
return $va;
}
sub XY{
$va = 'no';
$is = ($_[0] - $_[0] % 3);
$ie = $is + 2;
$js = ($_[1] - $_[1] % 3);
$je = $js + 2;
for($o=$is;$o<=$ie;$o++){
for($q=$js;$q<=$je;$q++){
if($_[2] eq $sd[$o][$q]){
$va = "yes";
last;
}
}
}
return $va;
}