해당 문제는 너무 자주 본 유형이다.
이제는 그냥 dfs, bfs임이 자동으로 생각난다.
달라진 점이라면 그저 대각선으로의 이동도 고려해야 한다는 점 뿐이다.
def dfs(y, x):
if x < 0 or x >= w or y < 0 or y >= h:
return False
if graph[y][x] == 1:
graph[y][x] = 0
dfs(y, x - 1)
dfs(y, x + 1)
dfs(y - 1, x)
dfs(y + 1, x)
dfs(y - 1, x - 1)
dfs(y - 1, x + 1)
dfs(y + 1, x - 1)
dfs(y + 1, x + 1)
return True
return False
while True:
w, h = map(int, input().split())
if w == 0 & h == 0:
break
graph = []
for _ in range(h):
graph.append(list(map(int, input().split())))
result = 0
for i in range(h):
for j in range(w):
if dfs(i, j):
result += 1
print(result)