https://www.acmicpc.net/problem/1012
1012๋ฒ: ์ ๊ธฐ๋ ๋ฐฐ์ถ
์ฐจ์ธ๋ ์๋์ธ ํ๋๋ ๊ฐ์๋ ๊ณ ๋ญ์ง์์ ์ ๊ธฐ๋ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๊ธฐ๋ก ํ์๋ค. ๋์ฝ์ ์ฐ์ง ์๊ณ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๋ ค๋ฉด ๋ฐฐ์ถ๋ฅผ ํด์ถฉ์ผ๋ก๋ถํฐ ๋ณดํธํ๋ ๊ฒ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์, ํ๋๋ ํด์ถฉ ๋ฐฉ์ง์
www.acmicpc.net
pypy3๋ก ์ ์ถํจ. ๋๋์ด dfs์ bfs๊ฐ ์ต์ํด์ก๋ฐ......!
# dfs
def dfs(x, y):
if x < 0 or x >= m or y < 0 or y >= n:
return False
if list[y][x] == 1:
list[y][x] = 0
dfs(x+1, y)
dfs(x-1, y)
dfs(x, y+1)
dfs(x, y-1)
return True
else:
return False
t = int(input())
count = []
for i in range(t):
m, n, k = map(int, input().split())
list = [[0] * m for _ in range(n)]
count.append(0)
for j in range(k):
x, y = map(int, input().split())
list[y][x] = 1
for a in range(n):
for b in range(m):
if dfs(b, a):
count[i] += 1
for i in range(t):
print(count[i])
# bfs
from collections import deque
def bfs(x, y):
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
queue = deque()
if list[y][x] == 1:
queue.append([y, x])
list[y][x] = 0
while queue:
q1, q2 = queue.popleft()
for i in range(4):
mx = q2 + dx[i]
my = q1 + dy[i]
if mx < 0 or mx >= m or my < 0 or my >= n:
continue
if list[my][mx] == 1:
queue.append([my, mx])
list[my][mx] = 0
return True
else:
return False
t = int(input())
count = []
for i in range(t):
m, n, k = map(int, input().split())
list = [[0] * m for _ in range(n)]
count.append(0)
for j in range(k):
x, y = map(int, input().split())
list[y][x] = 1
for a in range(n):
for b in range(m):
if bfs(b, a):
count[i] += 1
for i in range(t):
print(count[i])
'๐ค > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 7576: ํ ๋งํ (Python) (0) | 2022.02.02 |
---|---|
๋ฐฑ์ค 2178: ๋ฏธ๋ก ํ์ (Python) (0) | 2022.02.01 |
๋ฐฑ์ค 2667: ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ (Python) (0) | 2022.01.31 |
๋ฐฑ์ค 2606: ๋ฐ์ด๋ฌ์ค (Python) (0) | 2022.01.29 |
๋ฐฑ์ค 1260: DFS์ BFS (Python) (0) | 2022.01.29 |