[백준/코틀린] 11404번: 플로이드
골드 4
링크
풀이
플로이드-워셜(Floyd–Warshall) 알고리즘으로 모든 도시 쌍 간의 최소 비용을 구합니다.
중간 도시 k를 경유하는 경로 graph[i][k] + graph[k][j]가
기존 경로 graph[i][j]보다 짧으면 갱신하는 과정을 모든 k에 대해 반복합니다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
const val MAX = Int.MAX_VALUE / 2
fun main() {
val n = readln().toInt()
val m = readln().toInt()
val graph = List(n) { r -> MutableList(n) { c -> if (r == c) 0 else MAX } }
repeat(m) {
val (u, v, w) = readln().split(" ").map { it.toInt() }
graph[u - 1][v - 1] = minOf(graph[u - 1][v - 1], w)
}
for (k in 0 until n) {
for (i in 0 until n) {
for (j in 0 until n) {
graph[i][j] = minOf(graph[i][j], graph[i][k] + graph[k][j])
}
}
}
graph.forEach { row ->
println(row.map { if (it == MAX) 0 else it }.joinToString(" "))
}
}
연관 문제
This post is licensed under CC BY 4.0 by the author.