Machineboy空

백준 11724: 연결 요소의 개수 구하기 - DFS(깊이우선탐색) 본문

Computer/Coding Test

백준 11724: 연결 요소의 개수 구하기 - DFS(깊이우선탐색)

안녕도라 2023. 10. 31. 20:29

import sys
sys.setrecursionlimit(10000)

input = sys.stdin.readline
n,m = map(int, input().split())

#_를 쓰는 이유: i에 관해 반복한다? 할 때 그 인덱스의 의미가 없고, 반복 횟수 만이 의미가 있을 때
A = [[] for _ in range(n+1)]    #N개의 노드만큼의 인접 리스트를 만들어 둔다.
visited = [False] * (n+1)       #방문리스트 n개 또한 만들어 둔다.

def DFS(v):                # DFS(깊이우선탐색) 함수 정의 
    visited[v] = True      # 방문리스트 값이 True면 반환, False면 DFS 재귀함수 호출
    for i in A[v]:
        if not visited[i]:
            DFS(i)

for _ in range(m):          
    s,e = map(int, input().split())     # m개의 양 끝점을 읽는다.
    A[s].append(e)                      # 인접리스트의 s번째 칸에 연결된 것들 넣어준다.
    A[e].append(s)                      # 방향이 상관없으므로 e칸에도 넣어준다.

count = 0

for i in range(1, n+1):     # DFS가 한 번 끝날 때 마다 연결요소 개수 1 증가
    if not visited[i]:
        count += 1
        DFS(i)

print(count)