[[problem:MOVE]]
다익스트라 알고리즘을 적용하여 문제를 풀어 보려했습니다.
우선순위 큐를 만들어 x, y 순으로 정렬하여 넣고
하나씩 꺼내서 배열에 적용시켰습니다.
동일 알고리즘으로 ROUTING 문제를 해결해서 똑같이 해보았는데
이번 문제는 어느 부분이 틀린지 못 찾겠습니다.
도움 부탁드립니다.
package algospot;
import java.util.*;
class Edge implements Comparable<Edge>{
int x;
int y;
int c;
Edge(int x, int y, int c) {
this.x=x;
this.y=y;
this.c=c;
}
@Override
public int compareTo(Edge e) {
// TODO Auto-generated method stub
if(this.x > e.x)
return 1;
else if (this.x < e.x)
return -1;
else {
if(this.y > e.y)
return 1;
else if (this.y < e.y)
return -1;
return 0;
}
}
}
public class Move {
static PriorityQueue<Edge> q;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int C=sc.nextInt();
while(C-->0){
int N=sc.nextInt();
int M=sc.nextInt();
q=new PriorityQueue<>();
for(int i=0;i<M;i++)
q.add(new Edge(sc.nextInt(), sc.nextInt(), sc.nextInt()));
System.out.println(run(N,M));
}
sc.close();
}
static int run(final int N, final int M) {
int dist[]=new int[N];
dist[0]=0;
for(int i=1;i<N;i++)
dist[i]=Integer.MAX_VALUE;
while(!q.isEmpty()){
Edge tmp=q.poll();
int len = dist[tmp.x] + tmp.c;
if( len < dist[tmp.y] || dist[tmp.y] == Integer.MAX_VALUE)
dist[tmp.y]=len;
}
return dist[N-1];
}
}
9년 전
0개의 댓글이 있습니다.
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면
온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야
합니다. 현재 문제를 푸셨습니다.
샹아바
[[problem:MOVE]]
다익스트라 알고리즘을 적용하여 문제를 풀어 보려했습니다.
우선순위 큐를 만들어 x, y 순으로 정렬하여 넣고
하나씩 꺼내서 배열에 적용시켰습니다.
동일 알고리즘으로 ROUTING 문제를 해결해서 똑같이 해보았는데
이번 문제는 어느 부분이 틀린지 못 찾겠습니다.
도움 부탁드립니다.
9년 전