Mathematica 188 185170115130 46 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. 출력 행렬은 각 형태소 클러스터에 숫자를 레이블로 지정합니다. (입력 및 출력 매트릭스를 모두 감싸서 MatrixForm2 차원 구조를 강조했습니다.)
MorphologicalComponents1s를 각 셀의 클러스터 번호에 해당하는 정수로 바꿉니다 .

Max 가장 큰 클러스터 번호를 반환합니다.
섬 표시
Colorize 각 섬을 고유하게 채색합니다.
