공부하자!/알고리즘
백준 4963 섬의 개수 파이썬 - bfs
지우개원정대
2021. 9. 9. 12:11
문제
from collections import deque
import sys
dr = [-1, 1, 0, 0, -1, 1, -1, 1]
dc = [0, 0, -1, 1, -1, 1, 1, -1]
def bfs(x, y):
queue.append((x, y))
m[x][y] = cnt
while queue:
x, y = queue.popleft()
for i in range(8):
nx = x + dr[i]
ny = y + dc[i]
if 0 <= nx < h and 0 <= ny < w and m[nx][ny] == 1:
m[nx][ny] = cnt
queue.append((nx, ny))
while True:
w, h = map(int, sys.stdin.readline().split())
m = [[0] * w for i in range(h)]
queue = deque()
if w == h == 0:
break
for i in range(h):
line = list(map(int, sys.stdin.readline().split()))
for j in range(w):
m[i][j] = line[j]
cnt = 2
for i in range(h):
for j in range(w):
if m[i][j] == 1:
bfs(i, j)
cnt += 1
print(cnt-2)
대각선으로도 갈 수 있어서 8개 지정해줬고
cnt를 2로 설정해놓아서 1이랑 헷갈리지 않게 설정, 이후에 프린트 할 때는 2를 빼줬다