BFS ์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ๊ธฐ ์ ์ ๋จผ์ , ๊ทธ๋ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ดํดํด์ผ ํ๋ค.
ํ๋์ ๋
ธ๋์์ ์์ํด์ ๋ค๋ฅธ ๋
ธ๋๋ค์ ๋ฐฉ๋ฌธํ๋ ๊ฒ
๊ทธ๋ํ๋ ๋
ธ๋์ ๊ฐ์ ์ผ๋ก ํํ๋๋ค.
๋ ๋
ธ๋๊ฐ ์ฐ๊ฒฐ๋์ด ์๋ค๋ฉด, ๋ ๋
ธ๋๋ ์ธ์ ํด ์๋ค๋ผ๊ณ ๋งํ๋ค.
๊ทธ๋ํ์์ ๊ฐ๊น์ด ๋
ธ๋๋ถํฐ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ
( <-> DFS, ๊น์ด ์ฐ์ ํ์ : ๊ทธ๋ํ์์ ๊ฐ์ฅ ๋ฉ๋ฆฌ ์๋(๊น์ํ) ๋
ธ๋๋ฅผ ์ฐ์ ์ ์ผ๋ก ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ )
์ด ๋ฌธ์ ๋ queue๋ฅผ ์ด์ฉํด๋ ๋๊ณ , deque๋ฅผ ์ด์ฉํด๋ ๋๋ค.
๋๋ ์์ชฝ์์ append, pop์ ํ ์ ์๋๋ก deque๋ฅผ ์ด์ฉํ์๋ค.
ํ์ด -> ๊ตฌ์ญ๋ง๋ค ๋๋ ์ ์๊ฐํ๋ค. ํ ๊ตฌ์ญ๋ง๋ค ์ง๋ ์ด 1๋ง๋ฆฌ๊ฐ ํ์ํ ๊ฒ์ด๋ค. ๊ทธ๋ํ ๊ฐ ์นธ์ ๋๋ค๊ฐ 1์ธ ์นธ์ ๋ฐ๊ฒฌํ๋ฉด BFS๋ฅผ ์ํํ๋ค.
์ฆ, ํ ๊ตฌ์ญ์ BFS๊ฐ ํ ๋ฒ ์ํ๋๋ ๊ฒ์ด๋ค. BFS๊ฐ ์ํ๋๊ณ ๋๋ฉด ๊ทธ ๊ตฌ์ญ์ 1์ด ๋ชจ๋ 0์ผ๋ก ๋ฐ๋๋ค. ๋ฐ๋ผ์ ์ง๋ ์ด๋ BFS๊ฐ ์ํ๋ ๋๋ง๋ค ์นด์ดํธ +1 ์ด ๋๋ค.
๊ผฌ๋ฆฌ์ ๊ผฌ๋ฆฌ๋ฅผ ๋ฌผ์ด ํ์ด๋๊ฐ๋ ๊ฒ ๊ฐ๋ค๋ ๋๋์ด ๋ค์๋ค.
<ํ์ด>
from collections import deque
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
t = int(input())
def bfs(a, b):
queue = deque()
queue.append((a, b))
graph[a][b] = 0
while queue:
x, y = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < n and 0 <= ny < m and graph[nx][ny] == 1:
graph[nx][ny] = 0
queue.append((nx, ny))
for i in range(t):
cnt = 0
m, n, k = map(int, input().split())
graph = [[0]*m for _ in range(n)]
for j in range(k):
x, y = map(int, input().split())
graph[y][x] = 1
for a in range(n):
for b in range(m):
if graph[a][b] == 1:
bfs(a, b)
cnt += 1
print(cnt)
<์ฐธ๊ณ >
๊ทธ๋ํ ์๋ฃ๊ตฌ์กฐ