728x90
[파이썬] 백준 11724 : 연결 요소의 개수
11724번: 연결 요소의 개수 (acmicpc.net)
실버 2
그래프, BFS, DFS
접근
방향없는 그래프이므로 간선의 양 끝점을 서로 연결되도록 만든다.
bfs탐색을 하다가 큐의 값이 텅텅 비게되면 탐색이 끝나므로 그때 카운트를 해주는 방법으로 연결 요소의 개수를 셈할 수 있다.
코드(BFS)
import sys; input = sys.stdin.readline
from collections import deque
def bfs(start, visited, graph):
queue = deque([start])
visited[start] = True
while queue:
v = queue.popleft()
for i in graph[v]:
if not visited[i]:
queue.append(i)
visited[i] = True
N, M = map(int, input().split())
visited = [False] * (N+1)
graph = [[] for _ in range(N+1)]
for i in range(M):
x, y = map(int, input().split())
graph[x].append(y)
graph[y].append(x)
cnt = 0
for i in range(1, N+1):
if visited[i] == True:
continue
bfs(i, visited, graph)
cnt += 1
print(cnt)
모든 정점을 반복문으로 순회하면서 방문하지 않은 정점에 대해 bfs탐색을 하도록 한다.
bfs탐색을 최소한으로 하면서 탐색이 끝날때마다 cnt변수를 올려주는 방법으로 연결 요소의 개수를 구할 수 있다.
728x90
'알고리즘 문제 풀이' 카테고리의 다른 글
[파이썬] 백준 5567 : 결혼식 (0) | 2022.04.09 |
---|---|
[파이썬] 백준 4963 : 섬의 개수 (0) | 2022.04.09 |
[파이썬] 백준 5525 : IOIOI (0) | 2022.04.04 |
[파이썬] 백준 18870 : 좌표 압축 (0) | 2022.04.03 |
[파이썬] 백준 1780 : 종이의 개수 (0) | 2022.04.03 |