하나씩 알아가기

[BOJ_11724] 연결 요소의 개수 본문

알고리즘

[BOJ_11724] 연결 요소의 개수

clearwater 2021. 2. 3. 15:57
728x90
반응형

연결 요소(Connected Component)의 개수를 구하는 문제입니다. 인접행렬을 이용해서 풀 수 있습니다.

인접 행렬의 요소를 모두 확인할 것인데(n * n) 시작 노드부터 dfs 함수에 넣고 확인하는데 한 회차를 다 돌면 return하고 연결 요소 카운트를 올립니다.

1부터 n까지를 반복하는데 방문하지 않은 곳만 dfs에 넣습니다.

n, m = map(int, input().split())
adj = [[0 for _ in range(n+1)] for _ in range(n+1)]
visited = [False] * (n+1)
result = 0

for _ in range(m):
    x, y = map(int, input().split())
    adj[x][y] = 1
    adj[y][x] = 1

def dfs(cur):
    visited[cur] = True
    for i in range(1, n+1):
        if not visited[i] and adj[cur][i] == 1:
            dfs(i)
        if i == n:
            return

for i in range(1, n+1):
    if not visited[i]:
        dfs(i)
        result += 1

print(result)

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

 

728x90
반응형

'알고리즘' 카테고리의 다른 글

[BOJ_7576] 토마토  (0) 2021.02.09
[BOJ_4963] 섬의 개수  (0) 2021.02.03
[BOJ_1699] 제곱수의 합  (0) 2021.02.01
[BOJ_1260] DFS와 BFS  (0) 2021.01.27
DFS와 BFS 파이썬 코드  (0) 2021.01.27