์ฝ”ํ…Œ์ค€๋น„

<DFS BFS> ๋ฐฑ์ค€ 1012๋ฒˆ. ์œ ๊ธฐ๋† ๋ฐฐ์ถ”

์š”๋Œœ๋‹ค 2022. 7. 31. 20:04

https://www.acmicpc.net/problem/1012

 

1012๋ฒˆ: ์œ ๊ธฐ๋† ๋ฐฐ์ถ”

์ฐจ์„ธ๋Œ€ ์˜๋†์ธ ํ•œ๋‚˜๋Š” ๊ฐ•์›๋„ ๊ณ ๋žญ์ง€์—์„œ ์œ ๊ธฐ๋† ๋ฐฐ์ถ”๋ฅผ ์žฌ๋ฐฐํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ๋†์•ฝ์„ ์“ฐ์ง€ ์•Š๊ณ  ๋ฐฐ์ถ”๋ฅผ ์žฌ๋ฐฐํ•˜๋ ค๋ฉด ๋ฐฐ์ถ”๋ฅผ ํ•ด์ถฉ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ•œ๋‚˜๋Š” ํ•ด์ถฉ ๋ฐฉ์ง€์— 

www.acmicpc.net

from collections import deque
import sys
sys.setrecursionlimit(10000)
input = sys.stdin.readline
#์ƒํ•˜์ขŒ์šฐ
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]

def dfs(x,y):
  graph[x][y] = 0
  for i in range(4):
    nx = x + dx[i]
    ny = y + dy[i]
    if 0<= nx < h and 0<= ny < w:
      if graph[nx][ny]:
        graph[nx][ny] = 0
        dfs(nx,ny)

case = int(input())
cnt_lst = []

for _ in range(case):
  w , h, n = map(int, input().split()) #๊ฐ€๋กœ,์„ธ๋กœ,๊ฐœ์ˆ˜
  graph = [ [0]*w for i in range(h)]  
  cnt = 0
  for _ in range(n):
    i,j = map(int, input().split())
    graph[j][i] = 1
    
  for i in range(h):  # ์„ธ๋กœ : 0~7
    for j in range(w): #๊ฐ€๋กœ : 0~9
      if graph[i][j]:
        dfs(i,j)
        cnt+= 1
  cnt_lst.append(cnt)

print(*cnt_lst, sep = "\n")

์ •๋‹ต์ด๋‹ค. ์ฒ˜์Œ์— ํ‹€๋ ธ๋Š”๋ฐ, ๋ฐฐ์ถ”์˜ ์œ„์น˜๊ฐ€ x(๊ฐ€๋กœ), y(์„ธ๋กœ)์ž„์„ ์ฃผ์˜ํ•˜์ง€ ์•Š์•„ ๋ฆฌ์ŠคํŠธ ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•ด ํ‹€๋ ค๋ฒ„๋ ธ๋‹ค.

 

๋‚˜๋ฆ„ ์‹ค๋ฒ„ 2 ๋ณธ์ธ์—๊ฒŒ ์–ด๋ ค์šด ๋ฌธ์  ๋ฐ ๋งž์ถฐ์„œ ๊ธฐ๋ถ„์ด ์ข‹๋Œฑ