Пожалуйста помогите найти ошибки (небольшой код на perl'e)...?

программирование Linux математика perl

Почему-то когда ввожу это:
101
000
101
прога выдаёт "3" и при др. случаях тоже иногда выдаёт неправильный результат. Почему? Помогите пожалуйста, а то над прогой уже несколько дней сижу!

Условия задачи: Каждый элемент квадратной матрицы размеренности N x N равен нулю, либо единице. Найдите количество «островов», образованных единицами. Под «островом» понимается группа единиц (либо одна единица), со всех сторон окруженная нулями (или краями матрицы). Единицы относятся к одному «острову», если из одной из них можно перейти к другой «наступая» на единицы, расположенные в соседних клетках. Соседними являются клетки, граничащие по горизонтали или вертикали.

#!/usr/bin/perl
sub zero;
@sea = map{[split//]}<>; # ввод и создание двумерного массива
$count = 0;
for $y(0..$#sea){ # обход всех элементов
for $x(0..$#{$sea[$y]}){
if($sea[$y]->[$x] eq "1"){ # если найдена "1", то обнулить весь отсров
$count++;
zero $x, $y, \@sea;
}
}
}
print "$count\n";

sub zero{ # рекурсивное обнуление строва
my $x = $_[0], $y = $_[1], $sea = $_[2];
if(!$sea->[$y][$x] || $x < 0 || $y < 0 || $y > $#{$sea} || $x > $#{$sea->[$y]}){
return;
}
$sea->[$y][$x] = 0;
zero $x+1, $y, $sea;
zero $x-1, $y, $sea;
zero $x, $y+1, $sea;
zero $x, $y-1, $sea;
}

P.S. И вообще хотелось бы услышать как можно улучшить (упростить) код.
Ответы:
Здесь не много знающих perl, на linux.org.ru намного больше, туда и напишите:)


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.