51 lines
1.3 KiB
Python
51 lines
1.3 KiB
Python
def find_group(Map, M, N, i, j):
|
|
ret = []
|
|
temp = []
|
|
temp.append((i, j))
|
|
while temp:
|
|
t = temp.pop()
|
|
if t in ret:
|
|
continue
|
|
if 1 <= t[0]:
|
|
if Map[t[0] - 1][t[1]]:
|
|
temp.append((t[0] - 1, t[1]))
|
|
if t[0] < M - 1:
|
|
if Map[t[0] + 1][t[1]]:
|
|
temp.append((t[0] + 1, t[1]))
|
|
if 1 <= t[1]:
|
|
if Map[t[0]][t[1] - 1]:
|
|
temp.append((t[0], t[1] - 1))
|
|
if t[1] < N - 1:
|
|
if Map[t[0]][t[1] + 1]:
|
|
temp.append((t[0], t[1] + 1))
|
|
ret.append(t)
|
|
return ret
|
|
|
|
|
|
def solve(M, N, Ks):
|
|
Map = [[0 for _ in range(N)] for _ in range(M)]
|
|
count = 0
|
|
found = {}
|
|
for k in Ks:
|
|
Map[k[0]][k[1]] = 1
|
|
|
|
for i in range(M):
|
|
for j in range(N):
|
|
if Map[i][j]:
|
|
if (i, j) in found:
|
|
continue
|
|
else:
|
|
r = find_group(Map, M, N, i, j)
|
|
count += 1
|
|
for s in r:
|
|
found[s] = count
|
|
return count
|
|
|
|
|
|
if __name__ == '__main__':
|
|
T = int(input())
|
|
for _ in range(T):
|
|
M, N, K = map(int, input().split())
|
|
Ks = [tuple(map(int, input().split())) for _ in range(K)]
|
|
print(solve(M, N, Ks))
|