각 픽셀은 background pixel(0)이거나 image pixel(1)이다.
서로 연결된 image pixel들의 집합을 blob이라고 부른다.
8방향으로 연결이 가능하다.
입력 2차원 grid[N][N], 하나의 좌표 x,y
출력 blob의 크기, pixel이 blob에 속하지 않으면 0
현재 픽셀의 blob 크기를 세려면 픽셀이 1이어야한다. 그러므로 1이 아니라면 0을 리턴한다.
픽셀이 1이면 1을 카운트하고 중복 카운트를 방지하기 위해 2를 대입한다.
8방향으로 이웃한 픽셀에 대해 그 픽셀의 좌표를 인자로 갖는 함수를 재귀적으로 호출한다.
s=[
[1,0,0,0,0,0,0,1],
[0,1,1,0,0,1,0,0],
[1,1,0,0,1,0,1,0],
[0,0,0,0,0,1,0,0],
[0,1,0,1,0,1,0,0],
[0,1,0,1,0,1,0,0],
[1,0,0,0,1,0,0,1],
[0,1,1,0,0,1,1,1]
]
def CC(x,y):
n=len(s)
if x<0 or y<0 or x>=n or y>=n or s[x][y]!=1:
return 0
elif s[x][y]:
s[x][y]=-1
return 1+CC(x,y+1)+CC(x+1,y+1)+CC(x+1,y)+CC(x+1,y-1)+CC(x,y-1)+CC(x-1,y-1)+CC(x-1,y)+CC(x-1,y+1)
print(CC(0,0))
출력은
5
1
5
13
'알고리즘' 카테고리의 다른 글
멱집합 powerset (0) | 2018.02.02 |
---|---|
N queens problem 백트래킹 (0) | 2018.02.02 |
미로찾기 Maze (0) | 2018.02.01 |
순환의 개념과 기본 예제 3 (0) | 2018.02.01 |
순환의 개념과 기본 예제 2 (0) | 2018.01.31 |