문제
풀이
- 그래프 영역탐지 문제로 전형적인
DFS/BFS 알고리즘
문제이다.
DFS 알고리즘
을 활용하여 구하였다.
- 시간초과를 피하기 위해
sys모듈
의 setrecursionlimit
함수로 최대재귀깊이를 재설정하였다.
코드
from sys import setrecursionlimit, stdin
setrecursionlimit(10**7)
input = stdin.readline
dx = [-1, 0, 0, 1]
dy = [0, -1, 1, 0]
def dfs(x, y):
visited[x][y] = True
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or nx >= n or ny < 0 or ny >= m:
continue
if graph[nx][ny] == 1 and visited[nx][ny] == False:
dfs(nx, ny)
if __name__ == '__main__':
t = int(input())
for _ in range(t):
m, n, k = map(int, input().split())
cabbage = [list(map(int, input().split())) for _ in range(k)]
graph = [[0] * m for _ in range(n)]
visited = [[False] * m for _ in range(n)]
cnt = 0
for x, y in cabbage:
graph[y][x] = 1
for x in range(n):
for y in range(m):
if graph[x][y] == 1 and visited[x][y] == False:
dfs(x, y)
cnt += 1
print(cnt)
결과
출처 & 깃허브
BOJ 1012
GITHUB