문제링크
- 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 } }
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) {
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()
}