Notice
Recent Posts
Recent Comments
Link
뮁이의 개발새발
[JAVA] 백준 1922 네트워크 연결 (MST 알고리즘) 본문
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class bj1922 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(in.readLine()); // 컴퓨터의 수
int M = Integer.parseInt(in.readLine()); // 선의 수
int[][] map = new int[N + 1][N + 1];
int[] minEdge = new int[N + 1];
boolean[] visited = new boolean[N + 1];
for (int i = 0; i < M; i++) {
StringTokenizer st = new StringTokenizer(in.readLine(), " ");
int a = Integer.parseInt(st.nextToken()); // a부터
int b = Integer.parseInt(st.nextToken()); // b까지
int c = Integer.parseInt(st.nextToken()); // 비용
map[a][b] = map[b][a] = c;
}
for (int i = 1; i <= N; i++) {
minEdge[i] = Integer.MAX_VALUE;
}
int result = 0; // 최소신장트리 비용
minEdge[1] = 0; // 임의의 시작점 0의 간선비용을 0으로 세팅
for (int i = 1; i <= N; i++) {
// 1. 신장트리에 포함되지 않은 정점 중 최소간선비용의 정점 찾기
int min = Integer.MAX_VALUE;
int minVertex = -1; // 최소간선비용의 정점번호
for (int j = 1; j <= N; j++) {
if (!visited[j] && min > minEdge[j]) {
min = minEdge[j];
minVertex = j;
}
}
visited[minVertex] = true; // 신장트리에 포함시킴
result += min; // 간선비용 누적
// 2. 선택된 정점 기준으로 신장트리에 연결되지 않은 타 정점과의 간선 비용 최소로 업데이트
for (int j = 1; j <= N; j++) {
if (!visited[j] && map[minVertex][j] != 0 && minEdge[j] > map[minVertex][j]) {
minEdge[j] = map[minVertex][j];
}
}
}
System.out.println(result);
}
}
'Algorithm' 카테고리의 다른 글
[JAVA] 백준 1463 1로 만들기 (DP) (0) | 2021.09.14 |
---|---|
[JAVA] 프로그래머스 행렬 테두리 회전하기 (0) | 2021.09.14 |
[JAVA] 백준 14696 딱지놀이 (0) | 2021.08.30 |
[JAVA] 백준 13300 방 배정 (0) | 2021.08.30 |
[JAVA] 백준 10163 색종이 (0) | 2021.08.29 |
Comments