운송문제..좀 도와주세요 ㅜㅜ

  • KimKyujae
    KimKyujae

    운송문제..

    자바로 짰는데요..자꾸 런타임오류가 뜨는데..잘모르겠네요
    다른방법이 떠오르지도 않구요 ㅜㅜ 힌트좀 주세요..

    메소드는..2가지 방법으로 해봤는데
    둘다 답은 나오는데 제출하면 런타임이네요..방법자체가 틀린거같은데ㅜㅜ
    도움좀 주세용 ㅜㅜ

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.util.StringTokenizer;

    public class Main {
    public static void main(String agrs[]){
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    try{
    String temp = in.readLine();

    int TESTCASE = Integer.valueOf(temp);
            for(int i=0; i<TESTCASE; i++){
                temp = in.readLine();
                StringTokenizer st = new StringTokenizer(temp);
    
                int CITY = Integer.valueOf(st.nextToken());
                int LOAD = Integer.valueOf(st.nextToken());
    
                int Map[][] = new int[CITY][CITY];
                for(int j=0; j<CITY; j++){
                    for(int k=0; k<CITY; k++)
                        Map[j][k] = 10000;
                }
                for(int j=0; j<LOAD; j++){
                    temp = in.readLine();
                    st = new StringTokenizer(temp);
                    int x = Integer.valueOf(st.nextToken());
                    int y = Integer.valueOf(st.nextToken()); 
                    int l = Integer.valueOf(st.nextToken());
                    Map[x][y] = l;
                    Map[y][x] = l;
                }
    
                boolean check[] = new boolean[CITY];
                int dis[] = new int[CITY];
                for(int j=0; j<CITY; j++){
                    check[j] = true;
                    dis[j] = 10000;
                }
                dis[0] = 0;
    
                ////////////////////////////////////////////////
                //First Method                                 /
                //--------------------------------------------//
                int indextmp=0,index=0;
                int tmp;
                while(check[CITY-1]){
                    int min = 10000;
                    for(int j=0; j<CITY; j++){
                        tmp = dis[index] + Map[index][j];
                        if(check[j]&&dis[j] > tmp){
                            dis[j] = tmp;
                            if(j==(CITY-1)){
                                check[j]=false;
                                break;
                            }
                        }
                        if(check[j]&&min > dis[j]){
                            min = dis[j];
                            indextmp=j;
                        }
                    }
                    check[index] = false;
                    index = indextmp;
                }
                System.out.println(dis[CITY-1]);
                //--------------------------------------------//
                ////////////////////////////////////////////////
    
    
    
    
    
                /*//////////////////////////////////////////////
                //Second Method                               //
                //--------------------------------------------//
                int min,k=0;
                for(i=0; i<CITY; i++){
                    min = 10000;
                    for(int j=0; j<CITY; j++){
                        if(check[j] && dis[j] < min){
                            k=j;
                            min = dis[j];
                        }
                    }
    
                    check[k] = false;
                    if(min==10000) break;
                    for(int j=0; j<CITY; j++){
                        if(dis[j] > dis[k] + Map[k][j]){
                            dis[j] = dis[k] + Map[k][j];
                        }
                    }
                }
                System.our.println(dis[CITY-1]);
                //---------------------------------------------/
                //////////////////////////////////////////////*/
            }
        }catch(Exception e){
            System.out.println("Input Error");
        }
    }

    }


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