https://www.acmicpc.net/problem/2667
#단지번호 붙이기 dfs
def dfs(x,y):
if x <= -1 or x >= n or y <= -1 or y >= n:
return False
if graph[x][y] == 1:
graph[x][y] = 0
global cnt
cnt += 1
for i in range(4):
nx = x+dx[i]
ny = y+dy[i]
dfs(nx,ny)
return True
return False
n = int(input())
graph = [list(map(int,input())) for i in range(n)]
dx = [-1,1,0,0]
dy = [0,0,-1,1]
cnt = 0
result = 0
result_cnt = []
for x in range(n):
for y in range(n):
if dfs(x,y) == True:
result += 1
result_cnt.append(cnt)
cnt = 0
print(result)
print(result_cnt)
#단지번호 붙이기 bfs
from collections import deque
def bfs(x,y):
if graph[x][y] == 0:
return False
elif graph[x][y] == 1:
queue = deque([[x,y]])
graph[x][y] = 0
global cnt
cnt = 1
while queue:
row,col = queue.popleft()
for i in range(4):
nx = row+dx[i]
ny = col+dy[i]
if nx < 0 or nx >= n or ny < 0 or ny >= n:
continue
if graph[nx][ny] == 1:
queue.append([nx,ny])
graph[nx][ny] = 0
cnt += 1
return True
n = int(input())
graph = [list(map(int,input())) for i in range(n)]
dx = [-1,1,0,0]
dy = [0,0,-1,1]
cnt = 0
result = 0
result_cnt = []
for x in range(n):
for y in range(n):
if bfs(x,y) == True:
result += 1
result_cnt.append(cnt)
cnt = 0
print(result)
print(result_cnt)