サブアイランドを数える

Aug 29, 2024 am 06:31 AM

1905年。サブ島を数える

難易度:

トピック: 配列、深さ優先検索、幅優先検索、和集合検索、行列

0 (水を表す) と 1 (土地を表す) のみを含む 2 つの m x n バイナリ行列 Grid1 と Grid2 が与えられます。 は、4 方向 (水平または垂直) に接続された 1 のグループです。グリッドの外側にあるセルはすべて水のセルとみなされます。

グリッド 2 のこの島を構成するセルの すべてを含むグリッド 1 の島がある場合、グリッド 2 の島は サブ島とみなされます。 .

グリッド 2 内のサブアイランドと見なされるアイランドの返します。

例 1:

Count Sub Islands

  • 入力: グリッド 1 = [[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]]、グリッド 2 = [[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]]
  • 出力: 3
  • 説明:
    • 上の図では、左側のグリッドは Grid1 で、右側のグリッドは Grid2 です。
    • グリッド 2 で赤く塗られた 1 は、サブアイランドの一部であると考えられます。サブ島は 3 つあります。

例 2:

Count Sub Islands

  • 入力: グリッド 1 = [[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]]、グリッド 2 = [[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]]
  • 出力: 2
  • 説明:
    • 上の図では、左側のグリッドは Grid1 で、右側のグリッドは Grid2 です。
    • グリッド 2 で赤く塗られた 1 は、サブアイランドの一部であると考えられます。サブ島が 2 つあります。

制約:

  • m == グリッド 1.長さ == グリッド 2.長さ
  • n == グリッド1[i].length == グリッド2[i].length
  • 1
  • Grid1[i][j] と Grid2[i][j] は 0 または 1 です。

ヒント:

  1. floodfill を使用して、2 番目のグリッドの島を反復してみましょう
  2. 2 番目のグリッドの島内のすべてのセルが最初のグリッドの陸地で表されている場合、それらは接続されているため、その島がサブアイランドになることに注意してください

解決策:

深さ優先検索 (DFS) アプローチを使用してグリッド 2 のアイランドを探索し、各アイランドがグリッド 1 の対応するアイランド内に完全に含まれているかどうかを確認します。ソリューションを実装する方法は次のとおりです:

手順:

  1. グリッドの走査: Grid2 の各セルを反復処理します。
  2. グリッド 2 で島を特定する: グリッド 2 で陸上セル (1) に遭遇したら、DFS を使用して島全体を探索します。
  3. サブアイランド条件の確認: グリッド 2 のアイランドで DFS を実行しているときに、グリッド 1 内の対応するすべてのセルも陸上セルであるかどうかを確認します。存在する場合、その島はサブアイランドです。
  4. サブアイランドの数: サブアイランド条件を満たすグリッド 2 の各アイランドについて、サブアイランドの数を増やします。

このソリューションを 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
?>
ログイン後にコピー

説明:

  • DFS 関数: dfs 関数は、grid2 の島を探索し、grid1 の対応するセルがすべて陸上セルであるかどうかを確認します。グリッド 2 のいずれかのセルが陸地であるが、グリッド 1 の対応するセルが水である場合、グリッド 2 の島はサブ島ではありません。
  • 訪問済みとしてマーク: Grid2 を移動するときに、セルを 0 に設定して訪問済みとしてマークします。
  • メインループ: Grid2 内のすべてのセルを反復処理します。訪問されていない陸上セルを見つけるたびに、DFS を開始して、それがサブアイランドの一部であるかどうかを確認します。

時間計算量:

時間計算量は (O(m x n)) です。ここで、m は行数、n は列数です。これは、すべてのセルを 1 回訪問する可能性があるためです。

このソリューションは、指定された制約内で効率的に機能するはずです。

連絡先リンク

このシリーズが役立つと思われた場合は、GitHub で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!

このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:

  • LinkedIn
  • GitHub

以上がサブアイランドを数えるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

11ベストPHP URLショートナースクリプト(無料およびプレミアム)

Instagram APIの紹介 Instagram APIの紹介 Mar 02, 2025 am 09:32 AM

Instagram APIの紹介

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelでフラッシュセッションデータを使用します

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

LaravelのバックエンドでReactアプリを構築する:パート2、React

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelテストでの簡略化されたHTTP応答のモッキング

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPのカール:REST APIでPHPカール拡張機能を使用する方法

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

Codecanyonで12の最高のPHPチャットスクリプト

2025 PHP状況調査の発表 2025 PHP状況調査の発表 Mar 03, 2025 pm 04:20 PM

2025 PHP状況調査の発表

See all articles