[백준 11404 - Kotlin] 플로이드

kldaji·2022년 4월 6일
1

백준

목록 보기
52/76
post-custom-banner

문제링크

  • i에서 j로 가는 모든 경우의 수에 대한 최단거리를 구하는 문제이기 때문에 플로이드 와샬 알고리즘을 사용하여 해결할 수 있습니다.
  • 계속 98% 통과하고 실패하는데 뭐가 문제인지 모르겠다...
import java.io.BufferedReader
import java.io.BufferedWriter

private lateinit var bufferedReader: BufferedReader
private lateinit var bufferedWriter: BufferedWriter

fun main() {
    bufferedReader = System.`in`.bufferedReader()
    bufferedWriter = System.out.bufferedWriter()

    val n = bufferedReader.readLine().toInt()
    val m = bufferedReader.readLine().toInt()

    val paths = Array(n + 1) { Array(n + 1) { 100001 } }
    // i에서 i로 가는 비용은 0
    for (i in 1..n) {
        paths[i][i] = 0
    }

    for (i in 0 until m) {
        val (a, b, c) = bufferedReader
            .readLine()
            .split(" ")
            .map { it.toInt() }

        if (paths[a][b] > c) paths[a][b] = c
    }

    // 거쳐가는 노드
    for (k in 1..n) {
        // i에서 j로 가는 최소 비용
        for (i in 1..n) {
            for (j in 1..n) {
                val bypassPath = paths[i][k] + paths[k][j]
                if (paths[i][j] > bypassPath) {
                    paths[i][j] = bypassPath
                }
            }
        }
    }

    // 플로이드 와샬
    for (i in 1..n) {
        for (j in 1..n) {
            if (paths[i][j] == 100001) bufferedWriter.write("0 ")
            else bufferedWriter.write("${paths[i][j]} ")
        }
        bufferedWriter.write("\n")
    }

    bufferedReader.close()
    bufferedWriter.close()
}

profile
다양한 관점에서 다양한 방법으로 문제 해결을 지향하는 안드로이드 개발자 입니다.
post-custom-banner

0개의 댓글