[baekjoon] 자바 질문입니다.

윤주원·2023년 3월 29일
0

baekjoon

목록 보기
3/13
post-thumbnail
import java.util.*;
public class Main {
    static final int INF = 100000;
    static int n_insert;
    static int MAX = 10001;
    static int matrix[][]=new int[MAX][MAX];
    static int sum=0;
    static class GraphType{
        int n;
        int [][]weight=new int [MAX][MAX];
        public GraphType(int n){
            this.n=n;

        }

    }
    public static void init_g(GraphType g){
        for(int i=1;i<=g.n;i++)
            for(int j=1;j<=g.n;j++) {
                if(i==j)
                    g.weight[i][j]=0;
                g.weight[i][j] = INF;
            }
    }

    public static void floyd(GraphType g){
        int i, j, k;

        for (i = 1; i <= g.n; i++)
            for (j = 1; j <= g.n; j++)
                matrix[i][j] = g.weight[i][j];

        for (k = 1; k <= g.n; k++) {
            for (i = 1; i <= g.n; i++)
                for (j = 1; j <= g.n; j++)
                    if (matrix[i][k] + matrix[k][j] < matrix[i][j]) {
                        matrix[i][j] = matrix[i][k] + matrix[k][j];
                    }
        }
        // 가중치 계산 알고리즘
        for (int a = 1; a <= g.n; a++)
        {
            for (int b = 1; b <= g.n; b++)
            {
                if (matrix[a][b] < INF)
                    sum += matrix[a][b];
            }
        }
    }
    public static void main(String[] args){
        Scanner s=new Scanner(System.in);
        Main m=new Main();
        int start,end;
        int nvertex,number,edge;
        nvertex=s.nextInt();
        edge=s.nextInt();
        number=s.nextInt();
        
        GraphType g=new GraphType(0);
        g.n=nvertex;
        init_g(g);
        for(int a=1;a<=edge;a++){
            start=s.nextInt();
            end=s.nextInt();

            n_insert(g,start,end,number);
        }

        floyd(g);
        System.out.println(sum/2);

    }
    private static void n_insert(GraphType g, int start, int end, int number) {
        n_insert++;
        if (n_insert==number) // 1인 가중치일경우
            g.weight[start][end] = g.weight[end][start]=1;
        else//나머지```


            g.weight[start][end] = g.weight[end][start]=0;
    }
}

백준 23324 문제입니다. 실행하면 답은 잘 나오는데 백준에 제출하면 런타임 에러 (ArrayIndexOutOfBounds)가 계속 나와서요... 혼자서 해보는데 계속 안되서 어느 부분이 문제인지 조언 구해봅니다...ㅠ

profile
안녕하세요

0개의 댓글