일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
Tags
- C++
- binary search
- BFS
- 라인플러스
- 딥러닝
- Java
- STL
- 알고리즘
- 릿코드
- 시애틀
- Python
- 백트래킹
- 다이나믹프로그래밍
- DP
- 스프링 프레임워크
- 모두를 위한 딥러닝
- 머신러닝
- 프로그래밍언어론
- jvm
- dfs
- spring
- C/C++
- 백준
- 라인
- leetcode
- 파이썬
- 벤쿠버
- 스타벅스
- 프로그래머스
- Spring Framework
Archives
- Today
- Total
케이스윔의 개발 블로그
[백준 알고리즘][DFS] 11724번 연결 요소의 개수 본문
문제
방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오.
입력과 출력
첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어진다.
출력은 연결 요소의 개수이다
풀이
예제입력을 통해 그래프를 그려보면
왼쪽과 같은 그래프가 그려지므로 연결 요소는 2가 된다
어제 만들었던 DFS를 이용할 수 있게 응용해보면 그 코드에서는 무조건 0에서 그래프가 만들어지고 DFS 탐색을 시작하는 걸로 되어있으니 for문을 통해서 visited에 방문한적없는 vertex부터 항상 DFS 하고, 새로운 DFS를 할 때마다 카운트해준다
* DFS 한번짜두니깐 바로 풀수있닿ㅎㅎㅎㅎㅎㅎㅎ 물론 이게 매우 쉬운문제지만
코드
Graph G(n+1);
for(i=0; i<e; i++)
{
scanf("%d %d", &a, &b);
G.makeEdge(a, b);
}
for (i=1; i<=n; i++)
{
if(G.visited[i] == false){
G.DFS(i);
cnt++;
}
}
printf("%d", cnt);
'Algorithm > DFS &BFS' 카테고리의 다른 글
[백준 알고리즘][DFS] 10265번 MT (0) | 2018.01.20 |
---|---|
[백준 알고리즘][DFS] 2468번 안전영역 (0) | 2018.01.19 |
[백준 알고리즘][DFS] 11403번 경로 찾기 (0) | 2018.01.19 |
[백준 알고리즘][DFS] 9466번 텀 프로젝트 (0) | 2018.01.14 |
[백준 알고리즘][DFS] 1012번 유기농 배추 (0) | 2018.01.13 |
Comments