[백준] 1753번. 최단 경로 (다익스트라, java)
728x90
반응형
import java.util.ArrayList;
import java.util.PriorityQueue;
import java.util.Scanner;
public class Main {
static int v,e,k;
static ArrayList<Integer[]>[] list;
static int vis[];
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
v=sc.nextInt();
e=sc.nextInt();
k=sc.nextInt();//시작점
vis=new int[v+1];
list=new ArrayList[v+1];
for (int i = 1; i <= v; i++) {
vis[i]=-1;
}
for (int i = 1; i <= v; i++) {
list[i]=new ArrayList<>();
}
for (int i = 0; i < e; i++) {
int a=sc.nextInt();
int b=sc.nextInt();
int weight=sc.nextInt();
list[a].add(new Integer[] {b,weight}); //방향 그래프라서 한 쪽만 넣어준다.
// list[b].add(new Integer[] {a,weight});
}
PriorityQueue<Integer[]> pq=new PriorityQueue<>((a,b)->a[0]-b[0]);
//우선순위큐는 배열 등을 넣을 경우 정렬 조건을 넣어줘야된다.
pq.add(new Integer[] {0,k});
while(pq.size()!=0) {
int time=pq.peek()[0];
int cur=pq.peek()[1];
pq.poll();
if(vis[cur]==-1) {
vis[cur]=time;//현재 위치에서의 가중치
for (int i = 0; i < list[cur].size(); i++) {
int next=list[cur].get(i)[0];
int weight=list[cur].get(i)[1];
int temp=time+weight;
pq.add(new Integer[] {temp,next});
}
}
}
for (int i = 1; i <=v; i++) {
if(vis[i]==-1) {
System.out.println("INF");
}else{System.out.println(vis[i]);}
}
}
}
728x90
반응형
'백준' 카테고리의 다른 글
[백준] 1149번 RGB거리 (JAVA, DP) (0) | 2021.03.23 |
---|---|
[백준] 1463. 1로 만들기 (dp) (0) | 2021.03.23 |
[백준] 1197. 최소 스패닝 트리 (크루스칼 알고리즘, MST) (0) | 2021.03.19 |
[백준] 16562번. 친구비 (java, union-find) (0) | 2021.03.18 |
[백준] 13300번 방 배정 (java) (0) | 2021.02.26 |
TAGS.