mikhail_dvorkin icon

Dijkstra Algorithm

mikhail_dvorkin | PRO | 10/25/21 07:12:15 AM UTC | 0 ⭐ | 11707 👁️ | Never ⏰ | []
Kotlin |

830 B

|

None

|

0 👍

/

0 👎

fun main() {
    val (n, sIn, fIn) = readInts()
    val s = sIn - 1; val f = fIn - 1
    val inf = Int.MAX_VALUE / 2
    val matrix = List(n) { readInts().map { if (it == -1) inf else it } }
    val mark = BooleanArray(n) // IntArray заполн. 0, BooleanArray — false
    val dist = IntArray(n) { inf }.also { it[s] = 0 }
    while (true) {
        val v = matrix.indices.filter { !mark[it] }.minByOrNull { dist[it] }
            ?.takeIf { dist[it] < inf } ?: break
        mark[v] = true
        for (u in matrix.indices) {
            if (dist[u] > dist[v] + matrix[v][u]) {
                dist[u] = dist[v] + matrix[v][u]
            }
        }
    }
    println(if (dist[f] < inf) dist[f] else -1)
}
 
fun readLn(): String {
    while (true) {
        val s = readLine()!!.trim()
        if (s.isNotEmpty()) return s
    }
}
fun readStrings() = readLn().split(" ")
fun readInts() = readStrings().map { it.toInt() }
 

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎