뮁이의 개발새발

[JAVA] SWEA 1263 사람 네트워크 2 (Floyd 알고리즘) 본문

Algorithm

[JAVA] SWEA 1263 사람 네트워크 2 (Floyd 알고리즘)

뮁뮁이 2021. 9. 16. 17:59

원래 중간 3중 반복문에 조건문을 걸어서 i==k,k==j,i==j인 경우를 제외해주려고 했는데 더 시간이 2배로 걸려서 빼줬다... 조건문 쓰면 더 줄어들 줄 알았는데, 조건문을 연산하는 시간이 들어서 총 시간이 더 든 것 같다.

 

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

public class Solution {
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(in.readLine());
		StringBuilder sb = new StringBuilder();
		for (int tc = 1; tc <= T; tc++) {
			StringTokenizer st = new StringTokenizer(in.readLine());
			int N = Integer.parseInt(st.nextToken());
			int[][] D = new int[N][N];

			for (int i = 0; i < N; i++) {
				for (int j = 0; j < N; j++) {
					int value = Integer.parseInt(st.nextToken());
					if (i != j && value == 0) {
						D[i][j] = 9999;
					} else {
						D[i][j] = value;
					}
				}
			}
			for (int k = 0; k < N; k++) {
				for (int i = 0; i < N; i++) {
					for (int j = 0; j < N; j++) {
						D[i][j] = Math.min(D[i][k] + D[k][j], D[i][j]);
					}
				}
			}

			int answer = Integer.MAX_VALUE;
			for (int i = 0; i < N; i++) {
				int min = 0;
				for (int j = 0; j < N; j++) {
					min = min + D[i][j];
				}
				answer = Math.min(min, answer);
			}

			sb.append("#" + tc + " " + answer + "\n");
		}
		System.out.println(sb);
	}
}
Comments