[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends-ml 13318] グループ 3 の Scala ソースコード
- From: 松永直人 <naoto@xxxxxx>
- Date: Sun, 11 Apr 2010 20:34:53 +0900
松永です。合宿お疲れ様でした。
世話人の高橋(智)さんの練り上げられた計画のおかげで、気持ちよく学習、観光
できました。ありがとうございました。
グループ3の発表で披露したScalaのソースコードとテストデータを添付します。
--
松永直人(MATSUNAGA Naoto)
naoto@xxxxxx
object MinCost {
def main(args: Array[String]) {
val rowSize = args(0).toInt
val colSize = args(1).toInt
// æå°ã³ã¹ãã®ã«ã¼ããæå°ã³ã¹ããä¿å
var minCostRoute: List[(Int, Int)] = Nil
var minCost = 0
// ã³ã¹ããããä½æ
val costMap: Map[(Int, Int), Int] = {
val costs = for (i <- 0 until rowSize*colSize) yield args(i + 2).toInt
val cells = for {
row <- 0 until rowSize
col <- 0 until colSize
} yield (row, col)
Map() ++ (cells.toList zip costs.toList);
}
// ã«ã¼ãã®ã³ã¹ããè¨ç®
def cost(xs: List[(Int, Int)]): Int = (0 /: xs) (_ +costMap(_))
// ã»ã«ããããå
ãå¤å®
def inMap(cell: (Int,Int)): Boolean = {
0 <= cell._1 && cell._1 < rowSize && 0 <= cell._2 && cell._2 < colSize
}
// 次ã®ã»ã«åè£ãã«ã¼ãã«è¿½å
def pushNextCell(route: List[(Int, Int)], nextCell: (Int, Int)) {
// ã»ã«åè£ããããå
é¨ããã§ãã¯
if (!inMap(nextCell)) return
// æ¢ã«éã£ãã»ã«ããã§ãã¯
if (route.contains(nextCell)) return
// ç¾æç¹ã§ã®æå°ã³ã¹ããæ¢ã«è¶
éãã¦ããªãããã§ãã¯
if (minCostRoute != Nil && cost(nextCell :: route) >= minCost) return
// ã´ã¼ã«ã«å°éãã¦ããããã§ãã¯ããã¦ããã°ç»é²
if (nextCell == (rowSize - 1, colSize - 1)) {
minCostRoute = nextCell :: route
minCost = cost(minCostRoute)
return
}
// 次ã®ã»ã«åè£ãé¸æãã«ã¼ãã«è¿½å
pushNextCell(nextCell :: route, (nextCell._1, nextCell._2 + 1))
pushNextCell(nextCell :: route, (nextCell._1, nextCell._2 - 1))
pushNextCell(nextCell :: route, (nextCell._1 + 1, nextCell._2))
pushNextCell(nextCell :: route, (nextCell._1 - 1, nextCell._2))
}
// å¦çéå§
pushNextCell(Nil, (0, 0))
// çµæåºå
println("minCost: " + minCost)
println(minCostRoute.reverse)
}
}
ãå®è¡æé ã
scalac MinCost.scalaã§ã³ã³ãã¤ã«å¾ãä¸è¨ã®è¦é ã§å¼ã³åºãã
scala MinCost è¡æ° åæ° 1è¡ç®ã®ååã®ã³ã¹ã 2è¡ç®ã®ååã®ã³ã¹ãå ...
ããçµæã¯(è¡çªå·, åçªå·)ã®ã¿ãã«ã®ãªã¹ãã®å½¢å¼ã§åºåãããã
ãä¾ã
scala MinCost 5 5 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 1
ããããã¯ã5è¡5åã®ä¸è¨ã®ã³ã¹ããæã¤ã»ã«ãããªãä¸è¨ã®é åãæå³ããã
ãã1 2 1 1 2
ãã1 1 1 2 1
ãã2 2 1 1 2
ãã1 2 1 2 2
ãã1 1 1 1 1