์นดํ
๊ณ ๋ฆฌ ์์
[BoJ][Python] 4963 ์ฌ์ ๊ฐ์
jihuSunbae
2024. 12. 5. 23:13
๋ชฉ์ฐจ
๐ซก Overview
์ฒด๊ฐ ๋์ด๋: โ โโโโ
์์์๊ฐ: 20๋ถ
๋ฌธ์ ๋ ๋ฒจ: ์ค๋ฒ2 / ๋ฌธ์ ์ ํ: BFS
ํ์ด ์ํ: ์ค์ค๋ก ํด๊ฒฐ
์ถํ: ์๋ฒฝ ์ดํด
๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/4963
๋์ ์ฝ๋
๋๋ณด๊ธฐ
"""
์ฌ์ ๊ฐ์
๊ฐ์ ์ฌ: ์,ํ, ์ข, ์ฐ, ๋๊ฐ์
1: ๋
, 0์ ๋ฐ๋ค
"""
from collections import deque
def BFS(board, i, j):
d_lst = [(0,1),(0,-1),(1,0),(-1,0), (+1,1),(+1,-1),(-1,1),(-1,-1)]
global visited
queue = deque()
visited[i][j] = True
queue.append((i,j))
while queue:
x,y = queue.popleft()
for dx, dy in d_lst:
nx, ny = x+dx, y+dy
if nx < 0 or nx >= h or ny<0 or ny>=w:
continue
if not visited[nx][ny] and board[nx][ny] == 1:
visited[nx][ny] = True
queue.append((nx,ny))
while True:
global visited
# ์
๋ ฅ ๋ฐ๊ธฐ
w, h = list(map(int, input().split())) # w: ์ด์ ๊ฐ์, h: ํ์ ๊ฐ์, 1<=w,h<=50
if w == 0 and h == 0: break
board = [list(map(int,input().split())) for _ in range(h)]
# ๊ฒ์ฌ
visited = [[False]*w for _ in range(h)]
ans = 0
for i in range(h):
for j in range(w):
if not visited[i][j] and board[i][j] == 1:
BFS(board,i,j)
ans += 1
print(ans)