- 문제 : https://www.acmicpc.net/problem/1012
문제 이해
- 2차 행렬에서 1로만 이루어진 영역의 개수를 세는 문제다.
- 영역의 개수를 세기 위해 bfs를 이용하면 된다.
- 탐색을 위한 조건으로는 (방문하지 않은 노드) + (기존 행렬 값 == 1)이어야 한다.
- 그 외에는 일반 bfs 함수로 진행하면 된다.
정답 풀이
import sys
input = sys.stdin.readline
def bfs(x, y, visit):
queue = [[x, y]]
visit[x][y] = 1
dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]
while queue:
x, y = queue.pop(0)
for i in range(4):
nx, ny = x + dx[i], y + dy[i]
if 0 <= nx < m and 0 <= ny < n:
if not visit[nx][ny] and matrix[nx][ny] == 1:
visit[nx][ny] = 1
queue.append([nx, ny])
for _ in range(int(input())):
m, n, k = map(int, input().split())
matrix = [[0] * n for _ in range(m)]
for _ in range(k):
a, b = map(int, input().split())
matrix[a][b] = 1
visit = [[0] * n for _ in range(m)]
answer = 0
for i in range(m):
for j in range(n):
if not visit[i][j] and matrix[i][j] == 1:
answer += 1
bfs(i, j, visit)
print(answer)
'백준 > Search' 카테고리의 다른 글
[bfs/백준] 7562번 : 나이트의 이동 (0) | 2023.05.11 |
---|---|
[bfs/백준] 2178번 : 미로 탐색 (0) | 2023.05.11 |
[bfs/백준] 1260번 : DFS와 BFS (0) | 2023.05.10 |
[bfs/백준] 2644번 : 촌수계산 (0) | 2023.05.10 |
[이진탐색/백준] 1300번 : K번째 수 (0) | 2023.05.04 |