728x90
전형적인 다익스트라 문제이다.
<소스 코드>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Array;
import java.util.*;
public class Boj_1916_최소비용구하기 {
public static void main(String[] args) throws IOException {
PriorityQueue<int[]> pq = new PriorityQueue<>(new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[1] - o2[1];
}
});
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stz;
int N = Integer.parseInt(br.readLine());
int M = Integer.parseInt(br.readLine());
int dist[] = new int[N+1];
// 거리 초기화
for (int i = 1; i <= N; i++) {
dist[i] = 100000000;
}
List<int[]>[] v = new ArrayList[N+1];
for (int i = 0; i <= N; i++) {
v[i] = new ArrayList<int[]>();
}
for (int i = 0; i < M; i++) {
stz = new StringTokenizer(br.readLine());
int from = Integer.parseInt(stz.nextToken());
int to = Integer.parseInt(stz.nextToken());
int d = Integer.parseInt(stz.nextToken());
v[from].add(new int[]{to, d});
}
stz = new StringTokenizer(br.readLine());
int start = Integer.parseInt(stz.nextToken());
int end = Integer.parseInt(stz.nextToken());
dist[start] = 0;
pq.offer(new int[]{start, 0});
while(!pq.isEmpty()){
int cur[] = pq.poll();
if(dist[cur[0]] < cur[1])continue;
for(int i = 0; i < v[cur[0]].size(); i++ ){
int nxt[] = v[cur[0]].get(i);
if(dist[nxt[0]] > cur[1] + nxt[1]){
dist[nxt[0]] = cur[1] + nxt[1];
pq.offer(new int[]{nxt[0], dist[nxt[0]]});
}
}
}
System.out.print(dist[end]);
}
}
728x90
'알고리즘공부(Algorithm Study) > 문제풀이(ProblemSolving)' 카테고리의 다른 글
백준 2587 java - 대표값2(수학, 구현, 사칙연산) (0) | 2022.11.24 |
---|---|
백준 2566 java - 최댓값(구현) (0) | 2022.11.22 |
백준 1238 java - 파티(다익스트라) (0) | 2022.07.03 |
백준 14938 java - 서강 그라운드(플루이드와샬, 다익스트라) (0) | 2022.07.02 |
백준 1865 java - 웜홀(벨만 포드 알고리즘) (0) | 2022.06.30 |
댓글