https://www.acmicpc.net/problem/4963
import sys
from collections import deque
input = sys.stdin.readline
def bfs(a, b):
dx = [-1, 1, 0, 0, -1, 1, -1, 1]
dy = [0, 0, -1, 1, -1, 1, 1, -1]
queue = deque()
queue.append((a, b))
graph[a][b] = 0
while queue:
x, y = queue.popleft()
for i in range(8):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < h and 0 <= ny < w and graph[nx][ny] == 1:
graph[nx][ny] = 0
queue.append((nx, ny))
while True:
w, h = map(int, input().split())
if w == 0 and h == 0:
break
graph = [list(map(int, input().split()))for _ in range(h)]
cnt = 0
for i in range(h):
for j in range(w):
if graph[i][j] == 1:
cnt += 1
bfs(i, j)
print(cnt)
BFS를 이용하였으며, 대각선으로 연결되어 있는 사각형도 걸어갈 수 있는 사각형이므로 dx, dy에 대각선과 관련된 값을 넣었다. (ex(1,1)(-1,-1)(-1,1)(1,-1))
이중 반복문 범위때문에 꽤나 고생했다..😭