링크 : https://www.acmicpc.net/problem/11562

 

 

11562번: 백양로 브레이크

서울 소재 Y모 대학교에서 대규모 공사를 진행하면서, 학교가 마치 미로처럼 변해버리고 말았다. 공사 이전까지는 어떤 건물에서 출발하더라도 다른 모든 건물로 갈 수 있는 길이 있었으나, 공

www.acmicpc.net


소스코드(Floyd Warshall)

import java.io.*

private var N = 0 //건물의 수 (n ≤ 250)
private var M = 0 //길의 수 (m ≤ n * (n - 1) / 2 )
private var K = 0 //질문 수 (1 ≤ k ≤ 30,000)
private val bw = BufferedWriter(OutputStreamWriter(System.out))
private lateinit var graph: Array<IntArray>
private const val INF = Int.MAX_VALUE / 4

private fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    br.readLine().split(" ").map { it.toInt() }.apply {
        N = this[0]
        M = this[1]
    }
    graph = Array(N + 1) { IntArray(N + 1) { INF } }
    repeat(N){ graph[it+1][it+1] = 0 }

    for(i in 1..M) {
        //(1 ≤ u ≤ n), (1 ≤ v ≤ n), (u != v), (b = 0 또는 1)
        val (u, v, b) = br.readLine().split(" ").map { it.toInt() }
        if(b == 0) {
            graph[u][v] = 0
            graph[v][u] = 1 //없는길임으로 비용 1 설정
            continue
        }
        graph[u][v] = 0
        graph[v][u] = 0
    }
    floyd()

    K = br.readLine().toInt()
    repeat(K) {
        //(1 ≤ s ≤ n) , (1 ≤ e ≤ n)
        val (s, e) = br.readLine().split(" ").map { it.toInt() }
        bw.write("${graph[s][e]}\n" )
    }

    bw.flush()
    bw.close()

}
private fun floyd(){
    for (k in 1..N){
        for (i in 1..N){
            for (j in 1..N){
                if (i == k || k == j || i == j) continue // 비교 값이 같기 떄문에 Pass(검사 필요성이 없음)
                val cost = graph[i][k] + graph[k][j]
                if (cost < graph[i][j]){
                    graph[i][j] = cost
                    continue
                }
            }
        }
    }
}

'Algorithm_Kotlin' 카테고리의 다른 글

[Kotlin] BOJ14719 빗물  (0) 2023.02.27
[Kotlin] BOJ1553 도미노 찾기  (0) 2023.02.25
[Kotlin] BOJ2665 미로만들기  (0) 2023.02.03
[Kotlin] BOJ5972 택배 배송  (0) 2023.02.01
[Kotlin] BOJ1261 알고스팟  (0) 2023.01.31