import sys
sys.setrecursionlimit(3000)
input = sys.stdin.readline
num = int(input())
for _ in range(num):
M, N, K = map(int, input().split())
dfs_list = [[0 for i in range(N)] for k in range(M)] # 새로가 N이고 가로가 M인 테이블의 배열 초기화이다. 0으로 초기화 해준다.
count = 0
for j in range(K):
x, y = map(int, input().split())
dfs_list[x][y] = 1 # 주어진 조건의 지점에는 1로 초기화 해준다.
def solution(row, column):
if row >= M or row < 0 or column < 0 or column >= N: # 주어진 값이 범위를 벗어나면 즉시 종료
return False
if dfs_list[row][column] == 0: # 주어진 지점이 0일 경우 종료
return False
dfs_list[row][column] = 0 # 방문했으므로 0입력
# 동서남북을 돌면서 1로 되어 있는 모든지점 방문하고 0으로 바꿔준다.
solution(row+1, column)
solution(row-1, column)
solution(row, column+1)
solution(row, column-1)
return 1 # 1을 리턴하면 근처에 있는 1인 지점을 전부 방문했으므로 종료
# 모든 지점을 돌면서 수행
for i in range(M):
for k in range(N):
response = solution(i, k)
if response == 1:
count += 1
print(count)
처음에 recursion error가 발생해서
sys.setrecursionlimit(10**6)
을 해줬는데 다시 메모리 초과 오류가 발생해서
sys.setrecursionlimit(3000)
으로 해줬더니 해결 되었다. DFS로 푸는 것 보다. BFS로 푸는게 나아보인다.