おそらく、一連のランダムな迷路生成アルゴリズムのマイナーな変形である、これを行うアルゴリズムを設計できます。ユニオン検索法に基づいたものを提案します。
union-find の基本的な考え方は、ばらばらな (重複しない) サブセットに分割されたアイテムのセットが与えられた場合に、特定のアイテムが属するパーティションをすばやく識別することです。「結合」は、2 つのばらばらなセットを結合してより大きなセットを形成することであり、「検索」は、特定のメンバーが属するパーティションを決定することです。セットの各パーティションはセットの特定のメンバーによって識別できるため、ポインターがメンバーからルートに向かってメンバーを指すツリー構造を形成できます。最初に各パーティションのルートを見つけ、次に一方のルートの (以前は null) ポインタを変更して他方を指すようにすることで、(それぞれに任意のメンバを指定して) 2 つのパーティションを結合できます。
問題を互いに素な和集合の問題として定式化できます。最初は、個々のセルはそれぞれ独自のパーティションです。必要なのは、接続されたセルのパーティションが少数 (必ずしも 2 つとは限りません) になるまで、パーティションをマージすることです。次に、パーティションの 1 つ (おそらく最大のもの) を選択して描画します。
セルごとに、結合用のポインター (最初は null) が必要になります。隣接するセルのセットとして機能するには、おそらくビット ベクトルが必要になるでしょう。最初は、各セルには 4 つ (または 8 つ) の隣接するセルのセットがあります。
反復ごとにセルをランダムに選択し、ポインター チェーンをたどってそのルートを見つけます。ルートからの詳細では、その隣接セットが見つかります。その中からランダムなメンバーを選択し、そのルートを見つけて、隣接する領域を特定します。2 つの領域をマージするには、結合 (一方のルートを他方に向けるなど) を実行します。領域の 1 つに満足するまで繰り返します。
パーティションをマージする場合、新しいルートの新しい隣接セットは、前の 2 つのルートの隣接セットのセット対称差 (排他的論理和) になります。
各ルート要素でパーティション (サイズなど) を拡大するときに、おそらく他のデータを維持したいと思うでしょう。これを使用して、特定のユニオンを進めることについてもう少し選択的になり、いつ停止するかを決定するのに役立ちます。パーティション内のセルの散乱の何らかの尺度が関連している可能性があります。たとえば、小さな逸脱または標準偏差 (大きなセル数と比較して) は、おそらく密集したほぼ円形のブロブを示しています。
終了したら、すべてのセルをスキャンして、選択したパーティションの一部であるかどうかをテストし、個別のビットマップを作成します。
このアプローチでは、反復の開始時にセルをランダムに選択すると、より大きなパーティションを選択する傾向が強くなります。隣人を選択する場合、より大きな隣接パーティションを選択する傾向もあります。これは、明らかに優勢な 1 つのブロブを非常に迅速に取得する傾向があることを意味します。