BOJ_11724_연결 요소의 개수
2021. 12. 15. 15:39ㆍ백준 알고리즘(BOJ)
1
구분: 그래프 이론, 그래프 탐색, BFS, DFS
언어: Java
전략
- 그래프들의 연결 관계를 인접 리스트를 이용하여 표현한다 - Node클래스 생성, Node배열 생성
- 노드 1번 부터 BFS를 통해 차례로 방문을 한다 - 방문 여부 체크
2. 코드
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main{
//연결 리스트로 그래프를 받을 예정
static class Node{
int node; //노드 자체
Node link;//연결된 것
Node(int node, Node link){
this.node = node;
this.link = link;
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt(); //정점 수
int m = scanner.nextInt(); //간선 수
Node[] list = new Node[n+1];
//무방향 그래프
for(int i = 0; i<m; i++) {
int a = scanner.nextInt();
int b = scanner.nextInt();
list[a] = new Node(b,list[a]);
list[b] = new Node(a, list[b]);
}
int cnt = 0;
Queue<Integer> qq = new LinkedList<>();
boolean[] check = new boolean[n+1];
for(int i = 1; i<=n; i++) {
//이미 방문한 정점이라면 지나가
if(check[i])continue;
//큐에 넣고 방문 처리
qq.add(i);
check[i] = true;
cnt++;
while(!qq.isEmpty()) {
int num = qq.poll();
//인접한 부분을 탐색
for(Node temp = list[num]; temp!=null; temp=temp.link) {
//이미 방문한 곳이라면 지나가
if(check[temp.node])continue;
check[temp.node] = true;
qq.add(temp.node);
}
}
}
System.out.println(cnt);
}//main
}
3
무방향 그래프인데 DFS를 2번 사용하여 처음에는 시간 초과가 발생하였다
정점의 개수가 1000개 이하니 인접 행렬로 그래프를 표현해도 될 것 같다
'백준 알고리즘(BOJ)' 카테고리의 다른 글
BOJ_3040_백설 공주와 일곱 난쟁이 (0) | 2022.08.07 |
---|---|
BOJ_1012_유기농 배추 (0) | 2021.12.15 |
BOJ_14620_꽃길 (0) | 2021.12.10 |
BOJ_16439_치킨치킨치킨 (0) | 2021.12.07 |
BOJ_15721_번데기 (0) | 2021.12.07 |