import sys
sys.setrecursionlimit(10**6)
direction = [[1,0], [-1,0], [0,1], [0,-1]]
def dfs(n,m,x,y):
visited[x][y] = True
for d in direction:
nx, ny = x+d[0], y +d[1]
if 0 <= nx < n and 0 <= ny < m and maps[nx][ny] == 1:
if not visited[nx][ny]:
visited[nx][ny] = True
dfs(n,m,nx, ny)
T = int(input())
for _ in range(T):
m, n, k = [int(v) for v in input().split()]
maps = [[0]*m for _ in range(n)]
visited = [[False]*m for _ in range(n)]
for _ in range(k):
y, x = [int(v) for v in input().split()]
maps[x][y] = 1
result = 0
for x in range(n):
for y in range(m):
if not visited[x][y] and maps[x][y] == 1:
dfs(n,m,x,y)
result += 1
print(result)
dfs로 해결한 문제
n * m 크기의 배열을 만든 후 배추 위치에 1을 두고 dfs 진행
dfs를 이해하고 있다면 어렵지 않은 문제이다.