結果
| 問題 |
No.160 最短経路のうち辞書順最小
|
| コンテスト | |
| ユーザー |
norioc
|
| 提出日時 | 2015-08-16 13:55:11 |
| 言語 | Scala(Beta) (3.6.2) |
| 結果 |
CE
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 1,581 bytes |
| コンパイル時間 | 6,674 ms |
| コンパイル使用メモリ | 229,272 KB |
| 最終ジャッジ日時 | 2024-11-14 19:09:07 |
| 合計ジャッジ時間 | 7,198 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
コンパイルメッセージ
[31m[31m-- [E040] Syntax Error: Main.scala:16:71 ---------------------------------------[0m[0m
[31m16 |[0m [33mdef[0m [36mcalc[0m([36mn[0m: [35mInt[0m, [36ms[0m: [35mInt[0m, [36mg[0m: [35mInt[0m, [36mnodes[0m: [35mListBuffer[0m[([35mInt[0m, [35mInt[0m, [35mInt[0m)]) {
[31m[31m |[0m ^[0m
[31m |[0m '=' expected, but '{' found
[31m[31m-- [E040] Syntax Error: Main.scala:51:32 ---------------------------------------[0m[0m
[31m51 |[0m [33mdef[0m [36mmain[0m([36margs[0m: [35mArray[0m[[35mString[0m]) {
[31m[31m |[0m ^[0m
[31m |[0m '=' expected, but '{' found
2 errors found
ソースコード
import scala.collection.mutable.PriorityQueue
import scala.collection.mutable.ListBuffer
import scala.collection.mutable.HashSet
object Main {
val sc = new java.util.Scanner(System.in)
def readInts(): Array[Int] =
sc.nextLine.split(' ').map(_.toInt)
def Ord = new Ordering[(Int, Int, Int)] {
def compare(a: (Int, Int, Int), b: (Int, Int, Int)): Int =
b._3.compare(a._3)
}
def calc(n: Int, s: Int, g: Int, nodes: ListBuffer[(Int, Int, Int)]) {
val q = new PriorityQueue[(Int, Int, Int)]()(Ord) // (from, to, cost)
q.enqueue((0, g, 0))
val pathcost = Array.fill(n)(Int.MaxValue)
val prev = Array.fill(n)(new ListBuffer[Int])
while (!q.isEmpty) {
val (from, to, cost) = q.dequeue
if (cost == pathcost(to)) {
prev(to).append(from)
}
else if (cost < pathcost(to)) {
pathcost(to) = cost
prev(to).append(from)
// println("visit:", to, "cost:", cost)
for ((a, b, c) <- nodes) {
if (a == to)
q.enqueue((to, b, cost + c))
else if (b == to)
q.enqueue((to, a, cost + c))
}
}
}
// 経路復元
val path = new ListBuffer[Int]
path.append(s)
while (path.last != g) {
path.append(prev(path.last).min)
}
println(path.mkString(" "))
}
def main(args: Array[String]) {
val Array(n, m, s, g) = readInts()
val nodes = new ListBuffer[(Int, Int, Int)]
for (i <- 0 to m-1) {
val Array(a, b, c) = readInts()
nodes.append((a, b, c))
}
calc(n, s, g, nodes)
}
}
norioc