π³ λ§ν¬
π λ¬Έμ
μ μ¬κ°νμΌλ‘ μ΄λ£¨μ΄μ Έ μλ μ¬κ³Ό λ°λ€ μ§λκ° μ£Όμ΄μ§λ€. μ¬μ κ°μλ₯Ό μΈλ νλ‘κ·Έλ¨μ μμ±νμμ€.
ν μ μ¬κ°νκ³Ό κ°λ‘, μΈλ‘ λλ λκ°μ μΌλ‘ μ°κ²°λμ΄ μλ μ¬κ°νμ κ±Έμ΄κ° μ μλ μ¬κ°νμ΄λ€.
λ μ μ¬κ°νμ΄ κ°μ μ¬μ μμΌλ €λ©΄, ν μ μ¬κ°νμμ λ€λ₯Έ μ μ¬κ°νμΌλ‘ κ±Έμ΄μ κ° μ μλ κ²½λ‘κ° μμ΄μΌ νλ€. μ§λλ λ°λ€λ‘ λλ¬μΈμ¬ μμΌλ©°, μ§λ λ°μΌλ‘ λκ° μ μλ€.
πΎ νμ΄ λ°©λ²
κ·Έλν λ¬Έμ μ€ κ°λ¨ν λ¬Έμ μ΄λ€.
dx, dyμ μνμ’μ° + λκ°μ μ μΆκ°νμ¬ μμ κΈ°μ€μΌλ‘ μ΄ 8λ²μ νμν μ μλλ‘ ν΄μ€λ€. μ°κ²°λμ΄μμΌλ©΄ κ³μ μ§ννκ³ , λμ μμ μ 0μΌλ‘ λ§λ λ€ λ€μ λ
Έλλ‘ μ§νν΄μ€λ€. μ΄λ―Έ μ°κ²°λμλ€κ³ μκ°νλ―λ‘ graphμμ 0κ°μΌλ‘ λ°κΎΈμ΄μ£Όλ κ²μ΄λ€.
dfsκ° νλ² μ’
λ£λλ©΄, cntλ₯Ό 1 μ¦κ° μμΌμ€λ€.
solution μ½λ
import sys
sys.stdin = open("input.txt","rt")
sys.setrecursionlimit(10**5)
dx = [-1, 1, 0, 0, -1, 1, -1, 1]
dy = [0, 0, -1, 1, -1, 1, 1, -1]
def dfs(x,y):
visit[x][y] = 1
for i in range(8):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < h and 0 <= ny < w and visit[nx][ny] == 0 and graph[nx][ny] == 1:
graph[nx][ny] = 0
dfs(nx,ny)
while True:
w, h = map(int, sys.stdin.readline().split())
if w == 0 and h == 0:
break
visit = [[0] * w for _ in range(h)]
graph = []
for _ in range(h):
graph.append(list(map(int, sys.stdin.readline().split())))
cnt = 0
for i in range(h):
for j in range(w):
if visit[i][j] == 0 and graph[i][j] == 1:
dfs(i, j)
cnt += 1
print(cnt)