кодесурса
«PHP

Упражнения по PHP: прочитайте массовые данные и найдите количество островов

script1adsense2code
script1adsense3code

PHP: упражнение 71 с решением

На плоскости 10 вертикальных и горизонтальных квадратов. Каждый квадрат окрашен в синий и зеленый цвета. Синий представляет море, а зеленый представляет землю. Когда два зеленых квадрата соприкасаются с верхом и низом или справа и слева, говорят, что они заземлены. Область, созданная только одним зеленым квадратом, называется «остров». Например, на рисунке ниже показано пять островов.
Напишите PHP-программу для чтения массовых данных и определения количества островов.

Входные данные: один набор данных представлен 10 строками из 10 чисел, представляющих зеленые квадраты в виде 1 и синие квадраты в виде нулей.

Иллюстрированная презентация:

«PHP:

Пример решения: -

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 программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code