岛屿问题简单解法

解题思路:
递归的把所有遇到的1全部置为0.


<?php

$strIsland = <<<STR
1 1 1 1 0
1 1 0 1 0
1 1 0 0 1
0 0 0 1 0
STR;

$graph = [];

$lines = explode(PHP_EOL, $strIsland);

$row = 0;
foreach( $lines as $line )
{
    $items = explode( ' ', $line );

    $graph[$row] = [];
    foreach( $items as $item )
    {
        $graph[$row][] = $item;
    }

    $row++;
}

print_graph($graph);


$color = 0;
foreach( $graph as $row_index => $rows )
{
    foreach( $rows as $column_index => $item )
    {
        if( isset($graph[$row_index][$column_index]) && 1 == $graph[$row_index][$column_index] )
        {
            $color++;
        }

        erase2Zero($graph, $row_index, $column_index );
    }
}


function erase2Zero(&$graph, $row_index, $column_index)
{
    if( !isset( $graph[$row_index][$column_index] ) )
    {
        return;
    }

    if( $graph[$row_index][$column_index] == 0 )
    {
        return;
    }

    if( $graph[$row_index][$column_index] == 1 )
    {
        $graph[$row_index][$column_index] = 0;
    }

    erase2Zero( $graph, $row_index, $column_index - 1 );
    erase2Zero( $graph, $row_index, $column_index + 1 );
    erase2Zero( $graph, $row_index - 1, $column_index );
    erase2Zero( $graph, $row_index + 1, $column_index );
}


echo PHP_EOL;
echo PHP_EOL;

print_graph($graph);

echo 'island count: ', $color, PHP_EOL;




function print_graph($arr)
{
    foreach( $arr as $line )
    {
        foreach( $line as $item )
        {
            echo $item, ' ';
        }

        echo PHP_EOL;
    }
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值