티스토리 뷰
반응형
방향이 없는 연결 그래프에서 서로서로 연결된 덩어리가 몇 개인지 구하는 문제
문제의 조건
1. 첫째 줄에 N개의 정점을 가진 양방향 연결 그래프와 M개의 간선이 주어진다.
2. 둘째 줄부터 간선의 양 끝점이 주어진다.
3. 서로 연결된 요소가 몇 개인지 출력
풀이 과정
앞전에 풀었던 컴퓨터 바이러스 문제처럼 몇 개의 정점이 간선을 통해 서로 연결되어 있는지 확인하면 될 거라고 생각했습니다.
연결 요소라는 말이 헷갈렸는데 질문 게시판 보니까 컴퓨터 바이러스 문제처럼 간선으로 서로서로 연결된 것들을 한 덩어리로 치는 것이 맞더라고요.
풀이
1. 양방향 그래프를 만든 뒤 BFS로 현재 정점에서 방문할 수 있는 곳들을 모두 방문한다.
2. 1번 과정이 끝나고 나면 한 연결 요소(덩어리) 탐색이 끝난 것이기 때문에 정답 갯수 하나 증가
3. 모든 정점을 방문할 때까지 위 과정을 반복한다.
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int main(int argc, const char * argv[])
{
int N, M;
cin >> N >> M;
//양방향 그래프 세팅
vector<vector<int>> graph(N + 1);
for (int i = 0; M > i; i++)
{
int from, to;
cin >> from >> to;
graph[from].emplace_back(to);
graph[to].emplace_back(from);
}
vector<bool> visited(N+1, false);
int answer = 0;
//모든 정점을 방문할 때까지 반복
for (int i = 1; visited.size() > i; i++)
{
//현재 정점을 방문하지 않았으면 현재 정점에서 연결된 모든 정점을 방문한다.
if (!visited[i])
{
queue<int> q;
q.emplace(i);
visited[i] = true;
while (!q.empty())
{
auto curVertex = q.front();
q.pop();
for (int j = 0; graph[curVertex].size() > j; j++)
{
auto neighbor = graph[curVertex][j];
if (!visited[neighbor])
{
q.emplace(neighbor);
visited[neighbor] = true;
}
}
}
answer++; //가능한 모든 정점 방문이 끝나면 한 연결 요소(덩어리) 탐색이 끝난 것
}
}
cout << answer;
return 0;
}
반응형
'알고리즘 문제 풀이 > DFS BFS' 카테고리의 다른 글
[C++] 백준 온라인 저지 2468번 안전 영역 풀이 (0) | 2021.11.02 |
---|---|
[C++] 백준 온라인 저지 4963번 섬의 개수 풀이 (0) | 2021.10.27 |
[C++] 백준 온라인 저지 1012번 유기농 배추 풀이 (0) | 2021.10.24 |
[C++] 백준 온라인 저지 2606번 바이러스 풀이 (0) | 2021.10.23 |
[C++] 백준 온라인 저지 2667번 단지번호붙이기 풀이 (0) | 2021.10.23 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- dp
- 스위프트플레이그라운드
- 컴퓨터
- C언어기초
- 깊이우선탐색
- 프로그래머스
- BFS
- 너비우선탐색
- 그리디
- 컴퓨터공부
- 하드웨어
- hackerrank
- 영어공부
- DFS
- 캐나다생활
- 백준
- 기초
- greedy
- c언어
- 프로그래밍
- 알고리즘
- 코딩공부
- 아이패드
- c++
- 애플
- 다이나믹프로그래밍
- 캐나다
- 문제풀이
- 해커랭크
- 컴퓨터사이언스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함