1905年。サブ島を数える
難易度: 中
トピック: 配列、深さ優先検索、幅優先検索、和集合検索、行列
0 (水を表す) と 1 (土地を表す) のみを含む 2 つの m x n バイナリ行列 Grid1 と Grid2 が与えられます。 島は、4 方向 (水平または垂直) に接続された 1 のグループです。グリッドの外側にあるセルはすべて水のセルとみなされます。
グリッド 2 のこの島を構成するセルの すべてを含むグリッド 1 の島がある場合、グリッド 2 の島は サブ島とみなされます。 .
グリッド 2 内のサブアイランドと見なされるアイランドの数を返します。
例 1:
例 2:
制約:
ヒント:
解決策:
深さ優先検索 (DFS) アプローチを使用してグリッド 2 のアイランドを探索し、各アイランドがグリッド 1 の対応するアイランド内に完全に含まれているかどうかを確認します。ソリューションを実装する方法は次のとおりです:
このソリューションを PHP で実装してみましょう: 1905。サブ島を数える
<?php /** * @param $grid1 * @param $grid2 * @return int */ function countSubIslands($grid1, $grid2) { ... ... ... /** * go to ./solution.php */ } /** * @param $grid1 * @param $grid2 * @param $i * @param $j * @param $m * @param $n * @return int|true */ function dfs(&$grid1, &$grid2, $i, $j, $m, $n) { ... ... ... /** * go to ./solution.php */ } // Example usage: // Example 1 $grid1 = [ [1,1,1,0,0], [0,1,1,1,1], [0,0,0,0,0], [1,0,0,0,0], [1,1,0,1,1] ]; $grid2 = [ [1,1,1,0,0], [0,0,1,1,1], [0,1,0,0,0], [1,0,1,1,0], [0,1,0,1,0] ]; echo countSubIslands($grid1, $grid2); // Output: 3 // Example 2 $grid1 = [ [1,0,1,0,1], [1,1,1,1,1], [0,0,0,0,0], [1,1,1,1,1], [1,0,1,0,1] ]; $grid2 = [ [0,0,0,0,0], [1,1,1,1,1], [0,1,0,1,0], [0,1,0,1,0], [1,0,0,0,1] ]; echo countSubIslands($grid1, $grid2); // Output: 2 ?>
時間計算量は (O(m x n)) です。ここで、m は行数、n は列数です。これは、すべてのセルを 1 回訪問する可能性があるためです。
このソリューションは、指定された制約内で効率的に機能するはずです。
連絡先リンク
このシリーズが役立つと思われた場合は、GitHub で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!
このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
以上がサブアイランドを数えるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。