我在变量a
中表示Scala中的图形邻接列表。
val a = new HashMap[Int, Vector[Tuple2[Int, Int]]] withDefaultValue Vector.empty
for(i <- 1 to N) {
val Array(x, y, r) = readLine.split(" ").map(_.toInt)
a(x) += new Tuple2(y, r)
a(y) += new Tuple2(x, r)
}
我依次阅读每个边缘(x
和y
是节点,而r
是边缘的成本)。阅读之后,我将其添加到邻接列表中。
但是,在将包含邻居节点的元组和成本添加到HashMap时,我得到:
Solution.scala:17: error: type mismatch;
found : (Int, Int)
required: String
a(x) += new Tuple2(y, r)
我不明白为什么要String
。我没有在任何地方指定String
。
答案 0 :(得分:3)
+=
是连接到String
的运算符。
您可能希望执行以下操作:a.update(x, a.getOrElse(x, Vector()) :+ (x, r))
。
答案 1 :(得分:2)
此外,您正在Scala中编写Java代码。它编译,但相当于滥用语言:/
下次考虑做这样的事情:
val a = Range(1, N)
.map { _ => readline.split(" ").map (_.toInt) }
.flatMap { case Array(x, y, r) =>
Seq(x -> (y, r), y -> (x, r))
}
.groupBy(_._1)
.mapValues { _.map ( _._2) }