MOVE 문제 질문드립니다.

  • 샹아바
    샹아바

    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];
        }
    }
    

    7년 전
0개의 댓글이 있습니다.
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.