Mathematica 188185170115130 46 48 48文字
説明
以前のバージョンでは、互いにチェス盤距離が1の位置のグラフを作成しました。 GraphComponents
その後、コンポーネントごとに1つの島の数を明らかにしました。
現在のバージョンではMorphologicalComponents
、配列内の1のクラスター(1
物理的に連続している領域)の検索と番号付けに使用します。グラフ化は不要であるため、これによりコードが大幅に節約されます。
コード
Max@MorphologicalComponents[#/.{"."->0,"*"->1}]&
例
Max@MorphologicalComponents[#/.{"."->0,"*"->1}]&[{{".", ".", ".", ".", ".", ".", ".", ".", ".", "*", "*"}, {"*", "*", ".", ".", ".", ".", ".", ".", "*", "*", "*"}, {".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "."}, {".", ".", ".", "*", ".", ".", ".", ".", ".", ".", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", "*", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", ".", "*"}}]
5
使い方
データは配列として入力されます。Mathematicaでは、これはリストのリストです。
入力アレイにおいて、データが変換される1
のと0
置換することによっての
/.{"."->0,"*"->1}
where /.
は、ReplaceAll
置換規則が続く中置形式です。これは基本的に、配列を白黒画像に変換します。必要なのは、関数を適用することだけですImage
。
Image[{{".", ".", ".", ".", ".", ".", ".", ".", ".", "*", "*"}, {"*", "*", ".", ".", ".", ".", ".", ".", "*", "*", "*"}, {".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "."}, {".", ".", ".", "*", ".", ".", ".", ".", ".", ".", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", "*", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", ".", "*"}} /. {"." -> 0, "*" -> 1}]

白い四角は、値が1のセルに対応します。
以下の図は、このアプローチが使用するいくつかのステップを示しています。入力行列は含ま1
さんと0
さん。出力マトリックスは、各形態クラスターに番号を付けます。(MatrixForm
2次元構造を強調するために、入力行列と出力行列の両方をラップしました。)
MorphologicalComponents
1
sを各セルのクラスター番号に対応する整数に置き換えます。

Max
最大のクラスター番号を返します。
島の表示
Colorize
各島を一意に色付けします。
