반응형
https://www.acmicpc.net/problem/1753
풀이 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
//https://www.acmicpc.net/problem/1753
public class Main {
private static int E;
private static int V;
private static int K;
private static ArrayList<Edge>[] AL;
private static int[] distance;
static PriorityQueue<Edge> q = new PriorityQueue<>();
private static boolean[] visited;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
V = Integer.parseInt(st.nextToken()); // 정점
E = Integer.parseInt(st.nextToken()); // 엣지
K = Integer.parseInt(br.readLine()); // 시작점
distance = new int[V+1];
visited = new boolean[V+1];
AL = new ArrayList[V+1];
for(int i = 0; i<=V; i++) {
AL[i] = new ArrayList<>();
}
for(int i = 0; i <= V; i++) {
distance[i] = Integer.MAX_VALUE;
}
for(int i = 1; i <=E; i++) {
st = new StringTokenizer(br.readLine());
int u = Integer.parseInt(st.nextToken());
int v = Integer.parseInt(st.nextToken());
int w = Integer.parseInt(st.nextToken());
AL[u].add(new Edge(v,w));
}
q.offer(new Edge(K, 0));
distance[K] = 0;
while(!q.isEmpty()) {
Edge current = q.poll();
int c_v = current.vertex;
if(visited[c_v]) continue; // 이미 방문한 노드는 큐에 넣지 않음
visited[c_v] = true;
for(int i = 0; i < AL[c_v].size(); i++) {
Edge tmp = AL[c_v].get(i);
int next = tmp.vertex;
int value = tmp.value;
if(distance[next] > distance[c_v] + value) {
distance[next] = distance[c_v] + value;
q.offer(new Edge(next, distance[next]));
}
}
}
for(int i = 1; i <= V; i++) {
if(visited[i]) System.out.println(distance[i]);
else System.out.println("INF");
}
}
}
class Edge implements Comparable<Edge>{
int vertex;
int value;
public Edge(int vertex, int value) {
this.vertex = vertex;
this.value = value;
}
@Override
public int compareTo(Edge o) {
return this.value - o.value;
// if(this.value > o.value) return 1;
// else return -1;
}
}반응형
'Algorithm > BOJ' 카테고리의 다른 글
| <BOJ> 1717 자바 (집합의표현) + 유니온파인드 (0) | 2024.11.17 |
|---|---|
| <BOJ> 11779 자바 (최소비용 구하기2) (0) | 2024.10.11 |
| <BOJ> 21608 자바 (상어초등학교) (0) | 2024.08.19 |
| <BOJ> 19238 자바 (스타트택시 1%, 6% 주의!) (0) | 2024.08.19 |
| <BOJ> 19236 자바 (청소년상어) (0) | 2024.08.15 |