https://www.acmicpc.net/problem/1012

 

 

 

BFS와 DFS를 이해하고

2667번을 풀어봤다면 오히려 더 쉬운 문제이지만,

m와 n, x와 y, 가로와 세로, 행과 열에 있어서 헷갈렸던 문제...

import sys


def DFS(row, col):
    stack = []
    stack.append([row, col])

    while stack:
        r, c = stack.pop()
        if visited[r][c] == 0:
            visited[r][c] = 1
            for nR, nC in [[r+1, c],[r-1,c],[r,c+1],[r,c-1]]:
                if 0 <= nR < n and 0 <= nC < m:
                    if farm[nR][nC] == 1:
                        stack.append([nR, nC])


T = int(sys.stdin.readline())   # 테스트케이스 갯수

for _ in range(T):
    m, n, k = map(int, sys.stdin.readline().split())   # 가로, 세로, 배추갯수
    farm = [[0 for _ in range(m)] for _ in range(n)]
    visited = [[0 for _ in range(m)] for _ in range(n)]  # 배추벌레가 방문한 곳
    worm = 0  # 배추벌레의 갯수 카운트

    for _ in range(k):
        col, row = map(int, sys.stdin.readline().split())
        farm[row][col] = 1  # 배추가 위치하는 곳을 1로 표시

    #print(farm)
    for row in range(n):
        for col in range(m):
            if farm[row][col] == 1 and visited[row][col] == 0:
                DFS(row, col)
                worm += 1

    print(worm)

'알고리즘 > BFS와 DFS' 카테고리의 다른 글

2206번. 벽 부수고 이동하기  (0) 2019.12.18
7576번. 토마토  (0) 2019.12.17
2667번. 단지번호붙이기  (0) 2019.12.13
2606번. 바이러스  (0) 2019.12.13
1260번. DFS와 BFS  (0) 2019.12.13

+ Recent posts