티스토리 뷰

728x90

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

 

11724번: 연결 요소의 개수

첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주

www.acmicpc.net


  • 문제 : 

방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오.

 

 

 


  • 풀이 :

그래프를 bfs로 탐색하여 연결 요쇼의 개수를 구해주었습니다.

 

 

 


  • 소스코드 : 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import sys
from collections import deque
input = sys.stdin.readline
 
 
def bfs(start):
    queue = deque()
    queue.append(start)
    while queue:
        D = queue.popleft()
        for i in D:
            if c[i] == -1:
                queue.append(graph[i])
                c[i] = 0
 
if __name__ == "__main__":
 
    N,M = list(map(int,input().split()))
    c = [-1 for _ in range(N + 1)]
    graph = [[] for _ in range(N+1)]
    for _ in range(M):
        a,b = list(map(int,input().split()))
        graph[b].append(a)
        graph[a].append(b)
    cnt = 0
    for i in range(1,N+1):
        if c[i] == -1:
            c[i] = 0
            bfs(graph[i])
            cnt += 1
    if N == 1:
        print(1)
    else:
        print(cnt)
 
cs
320x100
댓글
© 2022 WonSeok, All rights reserved