白駿1202号-ウイルス


dx, dy = [0, 0, -1, 1], [1, -1, 0, 0]

def bfs():
    visited.append((i, j))
    queue = [(i, j)]

    while True:
        xx, yy = queue.pop()

        for ii in range(4):
            nx, ny = dx[ii] + xx, dy[ii] + yy
            if nx >= m or nx < 0 or ny >= n or ny < 0:
                continue

            if (nx, ny) in visited or graph[nx][ny] == 0:
                continue
            visited.append((nx, ny))
            queue.append((nx, ny))

        if not queue:
            break

for _ in range(int(input())):
    m, n, k = map(int, input().split())
    graph = [[0] * n for _ in range(m)]
    for i in range(k):
        x, y = map(int, input().split())
        graph[x][y] = 1

    visited = []
    result = 0
    for i in range(m):
        for j in range(n):
            if (i, j) in visited or graph[i][j] == 0:
                continue
            bfs()
            result += 1
    print(result)
プール(bfsを通るプール)
1.図形をすべて0に初期化し、白菜のある領域を1に初期化します.
2.すべてのグラフにアクセスする場合は、白菜が存在する領域をbfsとして確認し、確認した場所をvistedに置き、再度アクセスできません.
3.bfsを回転するたびにresult+1を、白菜の白ミミズを何匹必要か見つけて出力します.