최소 신장 트리 (MST) - 크루스칼, 프림
📍 정의 및 특징
모든 정점들을 연결하는 부분 그래프 중에서 그 가중치의 합이 최소인 트리
- 사이클 X
- 에지 중심!
- 노드가 N개일 때, MST를 구성하는 에지 개수는 항상 N-1개
- 대표 : 크루스칼(그리디), 프림 알고리즘
#사이클X #에지 #가중치합 #크루스칼 #프림
📍 필요 변수
1. 에지 클래스
- 노드 변수 2개
- 가중치 변수
2. 그래프 에지 리스트
- PriorityQueue<Edge> edges
3. 유니온 파인드 배열
- int[] parent
- 사이클 판단
4. 에지 개수
- int useEdge
5. 최소 가중치 합 결과
- int result
📍 실행 과정
- 그래프 에지 리스트, 유니온 파인드 배열 초기화
- 그래프 데이터를 가중치 기준으로 정렬 (참고)
- 가중치가 낮은 에지부터 연결 시도
: 가중치가 낮은 두 노드의 대표 노드가 다를 경우만 연결 (= 유니온 파인드)
(∵ 대표 노드가 같으면 사이클 생성되므로)
// MST 수행int useEdge = 0;int result = 0;while(useEdge < V - 1) {Edge now = pq.poll();if(find(now.s) != find(now.e)) {union(now.s, now.e);result += now.v;useEdge++;}}cs - 연결한 에지 개수가 N-1 될 때까지 과정 3 반복
- 에지 개수 == N -1 일 때, 종료 & 총 에지 비용 출력
➕ 예제
[백준/JAVA] 1197번: 최소 스패닝 트리
🔺 문제 1197번: 최소 스패닝 트리 첫째 줄에 정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000)가 주어진다. 다음 E개의 줄에는 각 간선에 대한 정보를 나타내는 세 정수 A, B, C가 주어
bono039.tistory.com
[백준/JAVA] 1414번: 불우이웃돕기
🔺 문제 1414번: 불우이웃돕기 첫째 줄에 컴퓨터의 개수 N이 주어진다. 둘째 줄부터 랜선의 길이가 주어진다. i번째 줄의 j번째 문자가 0인 경우는 컴퓨터 i와 컴퓨터 j를 연결하는 랜선이 없음을
bono039.tistory.com
[백준/JAVA] 17472번: 다리 만들기 2
🔺 문제 17472번: 다리 만들기 2 첫째 줄에 지도의 세로 크기 N과 가로 크기 M이 주어진다. 둘째 줄부터 N개의 줄에 지도의 정보가 주어진다. 각 줄은 M개의 수로 이루어져 있으며, 수는 0 또는 1이다
bono039.tistory.com
(참고)
[알고리즘/ 그래프] 최소 스패닝 트리 - 크루스칼(Kruskal)과 프림(Prim) 알고리즘 (Java)
스패닝 트리 또는 신장 트리 어떤 무향 그래프의 스패닝 트리는 원래 그래프의 정점 전부와 간선의 부분 집합으로 구성된 부분 그래프이다. 이때 스패닝 트리에 포함된 간선들은 정점들을 트리
loosie.tistory.com
- Do it 알고리즘 코딩 테스트 자바편