[백준] 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
반응형
TAGS.

Comments