Упражнения по PHP: прочитайте массовые данные и найдите количество островов
PHP: упражнение 71 с решением
На плоскости 10 вертикальных и горизонтальных квадратов. Каждый квадрат окрашен в синий и зеленый цвета. Синий представляет море, а зеленый представляет землю. Когда два зеленых квадрата соприкасаются с верхом и низом или справа и слева, говорят, что они заземлены. Область, созданная только одним зеленым квадратом, называется «остров». Например, на рисунке ниже показано пять островов.
Напишите PHP-программу для чтения массовых данных и определения количества островов.
Входные данные: один набор данных представлен 10 строками из 10 чисел, представляющих зеленые квадраты в виде 1 и синие квадраты в виде нулей.
Иллюстрированная презентация:
Пример решения: -
PHP-код:
<?php
{
$field = array();
for ($i = 0; $i < 12; $i++) {
$field[] = str_split(rtrim(fgets(STDIN)));
}
fscanf(STDIN, '');
$c = 0;
for ($i = 0; $i < 10; $i++) {
for ($j = 0; $j < 10; $j++) {
if ($field[$i][$j] ==='1') {
dfs($field, array($i, $j));
$c++;
}
}
}
echo "Number of islands: \n";
echo $c . PHP_EOL;
}
function dfs(&$field, $s) {
$stack = array($s);
$dx = array(1, -1, 0, 0);
$dy = array(0, 0, 1, -1);
while (count($stack)) {
$node = array_pop($stack);
$field[$node[0]][$node[1]] ='0';
for ($i = 0; $i < 4; $i++) {
$nx = $node[1] + $dx[$i];
$ny = $node[0] + $dy[$i];
if (!isset($field[$ny][$nx]) || $field[$ny][$nx] ==='0') {
continue;
}
$stack[] = array($ny, $nx);
}
}
}
?>
Пример ввода:
1100000111
1000000111
0000000111
0010001000
0000011100
0000111110
0001111111
1000111110
1100011100
1110001000
Пример вывода:
Количество островов: 5
Блок - схема:
Редактор кода PHP:
Есть другой способ решить это решение? Внесите свой код (и комментарии) через Disqus.
Предыдущий: Напишите программу PHP, чтобы найти номер клиента, который торговал второй подряд второй месяц подряд с прошлого месяца, и количество транзакций.
Далее: Напишите программу PHP для восстановления исходной строки, введя сжатую строку с этим правилом.
Каков уровень сложности этого упражнения?
Новый контент: Composer: менеджер зависимостей для PHP , R программирования