MakerHyeon

[백준] 11724번 연결 요소의 개수(python,c++) 본문

Algorithm/backjoon

[백준] 11724번 연결 요소의 개수(python,c++)

유쾌한고등어 2023. 2. 14. 06:04

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


SOLUTION CODE

# PYTHON

import sys

sys.setrecursionlimit(10**6)
input = sys.stdin.readline  # input많을시.

N, M = map(int, input().split())

adj = [[0] * N for _ in range(N)]
for _ in range(M):
    a, b = map(lambda x: x - 1, map(int, input().split()))
    adj[a][b] = adj[b][a] = 1

# for row in adj:
#     print(row)
ans = 0
chk = [False] * N


def dfs(now):
    for nxt in range(N):
        if adj[now][nxt] and not chk[nxt]:
            chk[nxt] = True
            dfs(nxt)


for i in range(N):
    if not chk[i]:
        ans += 1
        chk[i] = True
        dfs(i)

print(ans)

 

# C++

#include <iostream>
#include <vector>
using namespace std;

vector<int> vect[1001];
int visited[1001];

int N,M;

void DFS(int vertex){
    visited[vertex] = 1;
    for (int i=0; i<vect[vertex].size();i++)
    {
        int idx = vect[vertex][i];
        if(visited[idx]==0)
        {
            DFS(idx);
        }
    }
}

int main()
{
    int u,v;
    int cnt = 0;
    cin >> N >> M;
    for(int i=0; i<M; i++)
    {
        cin >> u >> v;
        vect[u].push_back(v);
        vect[v].push_back(u); // 무방향 그래프
    }
    
    for (int i=1; i<=N;i++)
    {
        if(visited[i]==0)
        {
            cnt++;
            DFS(i);
        }
    }
    cout<<cnt<<"\n";
}

 

 

Comments