라이브러리/JAVA
다익스트라
kimximya
2024. 6. 24. 21:09
전처리
static class Pair implements Comparable<Pair>
{
int v, w;
Pair () {}
Pair (int v, int w) { this.v = v; this.w = w; }
public int compareTo(Pair o) {
return this.w - o.w;
}
}
ArrayList<Pair>[] G = new ArrayList[N+1];
for (int i=1; i<=N; i++)
G[i] = new ArrayList<>();
for (int i=0; i<M; i++)
{
st = new StringTokenizer(input.readLine());
int u = Integer.parseInt(st.nextToken());
int v = Integer.parseInt(st.nextToken());
int w = Integer.parseInt(st.nextToken());
G[u].add( new Pair(v, w) );
}
다익스트라 (priority queue)
static int[] Dijkstra (ArrayList<Pair>[] G, int N, int start, int INF)
{
PriorityQueue<Pair> pq = new PriorityQueue<>();
boolean[] isVisited = new boolean[N+1];
int[] dist = new int[N+1];
for (int i=1; i<=N; i++)
dist[i] = INF;
dist[start] = 0;
pq.add( new Pair(start, 0) );
while ( !pq.isEmpty() )
{
int u = pq.poll().v;
if ( isVisited[u] == true )
continue;
isVisited[u] = true;
for (int i=0; i<G[u].size(); i++)
{
int v = G[u].get(i).v;
int w = G[u].get(i).w;
if ( dist[u] + w < dist[v] )
{
dist[v] = dist[u] + w;
pq.add(new Pair(v, dist[v]));
}
}
}
return dist;
}