용꿀
꼬마개발자허니
용꿀
전체 방문자
오늘
어제
  • 분류 전체보기 (250)
    • 개발 (77)
      • 스프링 입문 (7)
      • 스프링 기본 (9)
      • ToDo List using JPA (2)
      • 스프링 개념 (9)
      • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 (8)
      • 스프링 MVC (3)
      • CS (21)
      • 개발 팁 (8)
      • 스프링 MSA (5)
      • 곰터뷰🐻 (5)
    • 알고리즘 (169)
      • 알고리즘 문제 풀이 (165)
    • 잡동사니 (1)
      • 노래 가사 (1)
hELLO · Designed By 정상우.
용꿀

꼬마개발자허니

(C++) 백준 11724번 - 연결 요소의 개수
알고리즘/알고리즘 문제 풀이

(C++) 백준 11724번 - 연결 요소의 개수

2023. 6. 18. 01:50

문제 링크 : 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

풀이

방향이 없는 그래프를 BFS 하여 풀이하였다.

BFS를 사용하여 하나의 정점부터 차례대로 순회하면 이것들은 하나의 연결 요소가 된다.

그렇기에 출발점을 정점 하나하나로 두고, 방문했는지 여부를 사용하면 연결 요소의 수까지 파악할 수 있다.

#include <iostream>
#include <queue>

using namespace std;

vector<int> gp[1002];
int visited[1002];
int n, m, u, v, num;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin >> n >> m;
    while(m--){
        cin >> u >> v;
        gp[u].push_back(v);
        gp[v].push_back(u);
    }
    for(int i = 1; i <= n; i++){
        if(visited[i]) continue;
        visited[i] = 1;
        num++;
        queue<int> q;
        q.push(i);
        while(!q.empty())
        {
            int cur = q.front();
            q.pop();
            for(auto k : gp[cur]){
                if(visited[k]) continue;
                q.push(k);
                visited[k] = 1;
            }
        }
    }
    cout << num;
}

'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글

(C++) 백준 2252번 - 줄 세우기  (0) 2023.06.19
(C++) 백준 1260번 - DFS와 BFS  (1) 2023.06.19
(C++) 백준 1715번 - 카드 정렬하기  (0) 2023.06.17
(C++) 백준 11286번 - 절대값 힙  (0) 2023.06.16
(C++) 백준 1620번 - 나는야 포켓몬 마스터 이다솜  (0) 2023.05.23
    '알고리즘/알고리즘 문제 풀이' 카테고리의 다른 글
    • (C++) 백준 2252번 - 줄 세우기
    • (C++) 백준 1260번 - DFS와 BFS
    • (C++) 백준 1715번 - 카드 정렬하기
    • (C++) 백준 11286번 - 절대값 힙
    용꿀
    용꿀

    티스토리툴바