Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 프로젝트
- algorithm
- 백준
- 모던자바
- 자료구조
- OS
- BFS
- Spring
- programmers
- 코틀린
- backtracking
- TDD
- lambda
- Java8
- DFS
- Brute-force
- 네트워크
- 자바
- 스프링
- back-end
- 프로그래머스
- LEVEL2
- baekjoon
- 그래프
- java
- 알고리즘
- kotlin
- 백트래킹
- DP
- 운영체제
Archives
- Today
- Total
요깨비's LAB
[백준, 그래프 이론, Java] P.1197 최소 스패닝 트리 (프림) 본문
import java.util.ArrayList;
import java.util.List;
import java.util.PriorityQueue;
import java.util.Scanner;
class Vertax {
int id;
boolean isVisited;
List<Edge> edges;
public Vertax(int id) {
this.id = id;
this.isVisited = false;
this.edges = new ArrayList<>();
}
}
class Edge {
int from;
int to;
int value;
public Edge(int from, int to, int value) {
this.from = from;
this.to = to;
this.value = value;
}
}
public class Main {
public static void main(String[] args) {
Scanner scr = new Scanner(System.in);
int V = scr.nextInt();
int E = scr.nextInt();
List<Vertax> vertaxes = new ArrayList<>();
List<Edge> edges = new ArrayList<>();
for(int i=0;i<V;i++ ) {
vertaxes.add(new Vertax(i));
}
for(int i=0;i<E;i++) {
int fromId = scr.nextInt() - 1;
int toId = scr.nextInt() - 1;
int value = scr.nextInt();
Vertax fromVertax = vertaxes.get(fromId);
Vertax toVertax = vertaxes.get(toId);
fromVertax.edges.add(new Edge(fromId, toId, value));
toVertax.edges.add(new Edge(toId, fromId, value));
}
long answer = doAlgorithm(vertaxes.get(0), vertaxes, edges);
System.out.println(answer);
}
public static long doAlgorithm(Vertax start, List<Vertax> vertaxes, List<Edge> edges) {
long total = 0;
PriorityQueue<Edge> pq = new PriorityQueue<>((Edge e1, Edge e2) -> e1.value - e2.value);
start.isVisited = true;
start.edges.forEach((Edge edge) -> {
pq.add(edge);
});
while(!pq.isEmpty()) {
Edge edge = pq.poll();
Vertax toVertax = vertaxes.get(edge.to);
if(toVertax.isVisited) {
continue;
}
toVertax.isVisited = true;
total += edge.value;
toVertax.edges.forEach((Edge e) -> {
if(!vertaxes.get(e.to).isVisited) {
pq.add(e);
}
});
}
return total;
}
}
'알고리즘(Java) > 그래프 이론' 카테고리의 다른 글
[백준, 그래프 이론, Java] P.1647 도시 분할 계획 (크루스칼) (0) | 2021.04.20 |
---|---|
[백준, 그래프 이론, Java] P.2188 축사 배정(이분 매칭) (0) | 2021.04.20 |
[백준, 그래프 이론, Java] P.1197 최소 스패닝 트리 (크루스칼) (0) | 2021.04.16 |
[백준, 그래프 이론, Java] P.1922 네트워크 연결 (프림) (0) | 2021.04.16 |
[백준, 그래프 이론, Java] P.1922 네트워크 연결 (크루스칼) (0) | 2021.04.16 |
Comments