์ฝํ
์ค๋น
<dfs, bfs> ๋ฐฑ์ค 2583๋ฒ. ์์ญ ๊ตฌํ๊ธฐ (์ค๋ฒ 1)
์๋๋ค
2023. 1. 6. 16:02
https://www.acmicpc.net/problem/2583
2583๋ฒ: ์์ญ ๊ตฌํ๊ธฐ
์ฒซ์งธ ์ค์ M๊ณผ N, ๊ทธ๋ฆฌ๊ณ K๊ฐ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฐจ๋ก๋ก ์ฃผ์ด์ง๋ค. M, N, K๋ ๋ชจ๋ 100 ์ดํ์ ์์ฐ์์ด๋ค. ๋์งธ ์ค๋ถํฐ K๊ฐ์ ์ค์๋ ํ ์ค์ ํ๋์ฉ ์ง์ฌ๊ฐํ์ ์ผ์ชฝ ์๋ ๊ผญ์ง์ ์ x, y์ขํ๊ฐ๊ณผ ์ค
www.acmicpc.net
from collections import deque
m,n,k = map(int, input().split())
lst = [[0]*n for _ in range(m)]
visited = [[0]*n for _ in range(m)] #๋ฐฉ๋ฌธ์ฒ๋ฆฌ
dx = [0, 0, 1, -1]
dy = [1, -1, 0 , 0]
# print(lst)
for _ in range(k):
y1, x1, y2, x2 = map(int, input().split())
# print("์ : (x1,y1)", x1, y1," (x2,y2)", x2, y2)
x1 = m - x1
x2 = m - x2
# print("ํ: (x1,y1)", x1, y1," (x2,y2)", x2, y2)
for i in range(len(lst)):
for j in range(len(lst[i])):
if x2<=i<x1 and y1<=j<y2 :
lst[i][j] = 1
def bfs(lst, x, y):
q = deque()
q.append((x,y)) #ํ์ ์ถ๊ฐ
cnt = 1
lst[x][y] = True #๋ฐฉ๋ฌธ์ฒ๋ฆฌ
while q:
x,y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0<=nx<m and 0<=ny<n :
if lst[nx][ny] == False:
lst[nx][ny] = True
q.append((nx,ny))
cnt += 1
return cnt
result = []
for i in range(m):
for j in range(n):
if lst[i][j] == False: #๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด
result.append(bfs(lst, i, j))
result.sort()
print(len(result))
print(*result, sep=' ')
"""
5 7 3
0 2 4 4
1 1 2 5
4 0 6 2
"""
๋งต์ ์๋๋ถํฐ (0,0)์ผ๋ก ์ธ์ ์กฐ๊ธ ํค๋งธ๋ค.
๊ทธ๋ฆผ์ ๊ทธ๋ ค๊ฐ๋ฉฐ ์ดํดํ๋๋ฐ, ์ฝํ ์์ ์ข ์ด๋ฅผ ๋ชป ์ฐ๋๊น ๊ฑฑ์ ์ด๋ค
๊ทธ๋ฆฌ๊ณ ์ค๋๋ง์ bfs๋ฅผ ํธ๋๊น ๊น๋จน์ด์ ์๊ณ ๋ฆฌ์ฆ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์์ ใ