728x90
https://acmicpc.net/problem/1012
def dfs(row, col, matrix, visited):
pass
t = int(input())
for tc in range(1, t + 1):
m, n, k = map(int, input().split())
field = [[0] * m for _ in range(n)]
visited = [[0] * m for _ in range(n)]
for _ in range(k):
x, y = map(int, input().split())
field[y][x] = 1
delta = [(-1,0),(1,0),(0,-1),(0,1)]
stack = []
result = 0
for r in range(n):
for c in range(m):
if field[r][c] and visited[r][c] == 0:
stack.append((r, c))
while stack:
visit_node = stack[-1]
visited[visit_node[0]][visit_node[1]] = 1
for dt in delta:
dr = visit_node[0] + dt[0]
dc = visit_node[1] + dt[1]
if 0 <= dr < n and 0 <= dc < m:
if field[dr][dc] == 1 and visited[dr][dc] ==0:
stack.append((dr,dc))
break
else:
stack.pop()
result += 1
print(result)
1~2줄을 보면 재귀로 dfs를 짜려했다.
하지만 어떻게해야할지 막막해서 안했다.
쓰던방법이 가장 편하다 ㅋㅋㅋ
이러면 안되는데...
문제 자체는 아파트 단지수 세는거랑 같아서 쉽게 풀었다.
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 7569 토마토 (2) | 2021.03.02 |
---|---|
[백준] 7576 토마토 (0) | 2021.03.02 |
[백준] 10026 적록색약 (0) | 2021.03.01 |
[백준] 2667 단지 번호 붙이기 (0) | 2021.02.24 |
[백준] 2606 바이러스 (0) | 2021.02.24 |