連結成分と Flood Fill
島を数え、領域にラベルを付けます
「連結成分と Flood Fill」はCoddyKit上の無料Competitive Programming Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCompetitive Programming Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Competitive Programming Academyコースには全4レッスンが含まれています。
連結成分とは何か
連結成分とは、互いに行き来できるノードのグループです。1つのグラフに複数の分離したグループが含まれることもあります。🧩
連結成分を数える
連結成分を数えるには、未訪問の各ノードから探索を開始します。新たに開始するたびに、1つの新しいグループ全体を見つけたことになります。
すべてのノードをループする
ノード1からnまでを順に確認します。まだ未訪問のノードを見つけたら、新しい連結成分を発見したことになるので探索します。
for s in range(1, n + 1):
if not visited[s]:
bfs_or_dfs(s)
count += 1グループごとに1回探索する
内側のBFSまたはDFSが連結成分全体を訪問済みにするため、外側のループが次に同じ成分を処理することはありません。
グリッドもグラフ
2次元グリッドは隠れたグラフです。各セルがノードで、隣接するセルとつながっています。これにより、定番のフラッドフィルという考え方を使えます。🗺️
4つの方向
セルからは通常、上、下、左、右に移動します。これらの移動を方向ベクトルとして保存すると、コードをすっきり保てます。
dirs = [(-1, 0), (1, 0), (0, -1), (0, 1)]グリッドの範囲内にとどまる
移動する前に、新しい行と列が範囲内にあることを確認します。この確認を省くと、インデックスエラーや誤答につながります。
if 0 <= nr < rows and 0 <= nc < cols:
pass1つの領域をフラッドフィルする
フラッドフィルは1つのセルから始まり、ペイントバケツツールのように、つながっている同じ種類のセルすべてに広がります。
島を数える
島を数えるには、グリッドを走査し、新しい陸地セルを見つけるたびに島全体をフラッドフィルして、個数に1を加えます。
if grid[r][c] == '1' and not seen[r][c]:
flood(r, c)
islands += 1領域にラベルを付ける
フラッドフィル中に、各セルにラベルを保存できます。後から、どのセルがどの領域に属するかをすぐに判定できます。
グリッドサイズに対して線形
各セルを1回ずつ訪問するため、グリッドに対するフラッドフィルの計算量はO(rows times cols)です。競技プログラミングの制限時間にも十分収まります。
確認問題
連結成分はどのように数えますか?
まとめ
未訪問の各ノードから探索して連結成分を数え、グリッドではフラッドフィルを使って領域にラベルを付けたり、島を数えたりします。🎉
よくある質問
「連結成分と Flood Fill」レッスンは無料ですか?
はい。「連結成分と Flood Fill」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Competitive Programming Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Competitive Programming Academyコースには全4レッスンが含まれています。
「連結成分と Flood Fill」で何を学びますか?
島を数え、領域にラベルを付けます ブラウザで直接実行するハンズオンコードでCompetitive Programming Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Competitive Programming Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCompetitive Programming Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「連結成分と Flood Fill」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCompetitive Programming Academyレッスンでコードを書いて実行できますか?
はい。すべてのCompetitive Programming Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 入力から隣接リストを作る
- 重みなし最短経路のための BFS
- DFS、再帰、反復スタック
- 連結成分と Flood Fill