Mathematica 18818517011513046 48字符
说明
在早期版本中,我绘制了棋盘间距彼此为1的位置图。 GraphComponents
然后显示岛屿的数量,每个组成部分一个。
当前版本用于MorphologicalComponents
查找数组1
中物理上连续的簇的簇并对其编号。由于不需要绘图,因此可以节省大量代码。
码
Max@MorphologicalComponents[#/.{"."->0,"*"->1}]&
例
Max@MorphologicalComponents[#/.{"."->0,"*"->1}]&[{{".", ".", ".", ".", ".", ".", ".", ".", ".", "*", "*"}, {"*", "*", ".", ".", ".", ".", ".", ".", "*", "*", "*"}, {".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "."}, {".", ".", ".", "*", ".", ".", ".", ".", ".", ".", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", "*", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", ".", "*"}}]
5
怎么运行的
数据作为数组输入;在Mathematica中,这是一个列表列表。
在输入数组中,通过替换将数据转换为1
和0
/.{"."->0,"*"->1}
其中/.
是后缀ReplaceAll
规则的后缀形式。这实际上将阵列转换为黑白图像。我们需要做的就是应用功能Image
。
Image[{{".", ".", ".", ".", ".", ".", ".", ".", ".", "*", "*"}, {"*", "*", ".", ".", ".", ".", ".", ".", "*", "*", "*"}, {".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "."}, {".", ".", ".", "*", ".", ".", ".", ".", ".", ".", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", "*", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", ".", "*"}} /. {"." -> 0, "*" -> 1}]

白色正方形对应于值为1的单元格。
下图显示了该方法使用的一些步骤。输入矩阵仅包含1
和0
。输出矩阵用数字标记每个形态簇。(我将输入和输出矩阵都包裹起来MatrixForm
以突出显示它们的二维结构。)
MorphologicalComponents
将1
s 替换为与每个单元的簇号相对应的整数。

Max
返回最大的群集号。
显示岛屿
Colorize
将为每个岛唯一上色。
