# 4964 섬의 개수 실버 2
import sys
from collections import deque
input = sys.stdin.readline
di = [0,0,1,-1,-1,1,-1,1]
dj = [1,-1,0,0,1,1,-1,-1]
while True:
w, h = map(int, input().split())
if w == 0 and h == 0: break
maps = [list(map(int,input().split())) for _ in range(h)]
visited = [[0] * (w+1) for _ in range(h)]
cnt = 0
# for p in maps:
# print(p)
def bfs():
global cnt
for i in range(h):
for j in range(w):
if maps[i][j] == 1 and not visited[i][j]:
deq = deque()
deq.append((i,j))
visited[i][j] = 1
while deq:
r,c = deq.popleft()
for k in range(8):
nr = r + di[k]
nc = c + dj[k]
# 벽체크 + 방문 안한 곳 + 섬이 존재하는 곳
if 0 <= nr < h and 0 <= nc < w and not visited[nr][nc] and maps[nr][nc] == 1:
visited[nr][nc] = 1
deq.append((nr,nc))
cnt += 1
bfs()
print(cnt)
'알고리즘 문제풀이' 카테고리의 다른 글
백준 1931 회의실 배정 Python 그리디 실버 1 (0) | 2024.04.04 |
---|---|
백준 7569 토마토 Python 그래프 BFS 골드 5 (0) | 2024.03.31 |
백준 1991 트리 순회 Python 트리 DFS 실버 1 (0) | 2024.03.31 |
백준 2606 바이러스 Python BFS 실버3 (0) | 2024.03.31 |
백준 5014 스타트링크 Python BFS 실버 1 (2) | 2024.03.31 |