백준 [11404] kotlin

[문제]

https://www.acmicpc.net/problem/11404

 

11404번: 플로이드

첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가

www.acmicpc.net

[풀이]

플로이드-와샬로 푸는 문제이다.

플로이드-와샬의 시간복잡도는 O(n^3)이므로, n의 최대는 100이므로 충분히 플로이드-와샬로 풀 수 있는 문제이다.

 

[코드]

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import kotlin.math.min

fun main()
{
    var br = BufferedReader(InputStreamReader(System.`in`))
    var bw = BufferedWriter(OutputStreamWriter(System.out))

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

    var arr = Array(n){ i ->IntArray(n){ j -> if (i == j) 0 else 100000001 }}

    repeat(m)
    {
        val tmp = br.readLine().split(" ").map { it.toInt() }
        arr[tmp[0]-1][tmp[1]-1] = min(arr[tmp[0]-1][tmp[1]-1], tmp[2])
    }
    for(k in arr.indices)
    {
        for(i in arr.indices)
        {
            for(j in arr.indices)
            {
                arr[i][j] = min(arr[i][k] + arr[k][j], arr[i][j])
            }
        }
    }
    for(i in arr){
        for(j in i)
        {
            if(j == 100000001) bw.write("${0} ")
            else bw.write("$j ")
        }
        bw.write("\n")
    }
    bw.flush()
    bw.close()
}

'백준 > 플로이드 와샬' 카테고리의 다른 글

백준 [1956] kotlin  (0) 2023.01.17