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

 

 

 

BFS 혹은 DFS로 풀 수 있는 문제인데, 전에 포스팅했던 문제보다는 조건이 덜 까다롭다.

인접 노드들을 일정한 순서대로 방문할 필요가 없으므로 인접 노드들을 저장할 때 set을 사용했다.

 

import sys
import collections


def BFS(start):
    infected = []
    queue = collections.deque()
    queue.append(start)

    while queue:
        node = queue.popleft()
        if node not in infected:
            infected.append(node)
            if node in network:
                queue.extend(network[node])
    return len(infected)-1


nodeCount = int(sys.stdin.readline())
edgeCount = int(sys.stdin.readline())
network = {}

for _ in range(edgeCount):
    start, end = map(int, sys.stdin.readline().split())
    if start not in network:
        network[start] = {end}  # set. 집합
    elif start in network:
        network[start].add(end)
    if end not in network:
        network[end] = {start}
    elif end in network:
        network[end].add(start)

#print(network)

print(BFS(1))

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

2206번. 벽 부수고 이동하기  (0) 2019.12.18
7576번. 토마토  (0) 2019.12.17
1012번. 유기농 배추  (0) 2019.12.13
2667번. 단지번호붙이기  (0) 2019.12.13
1260번. DFS와 BFS  (0) 2019.12.13

+ Recent posts