wvogel日記

自分用の技術備忘録が多めです.

手法

うーん。
なんだかなあ。
Haskellには
(!!)関数があるので、これを入れ子にして、C++でやったようなDijkstra法を実現することは可能です。


可能ですが、なんだかなー......
汚い。
というか、普通に手続き型で書くのと何の変化もなくなってしまう。
入力を受け取るところだけ書きましたが、まさにC++でやったとおり

toInt :: String -> [Int]
toInt [] = []
toInt (x:xs) = read [x] : toInt xs

input :: (Int,Int) -> String -> [[Int]]
input (h,w) =take h.map (toInt.take w).lines

toAlist :: [String] -> (Int,Int)
toAlist (x:y:_) = (read x , read y)

main = do hw <- getLine
          cs <- getContents
          print $ input (toAlist $ words hw) cs

これを使って、あとはh,wについて、
  パターンマッチ
  (!!)による要素取り出し
とかをすればできるといえばできますが。
書いた所で達成感はないだろうな。後味悪いだけ.....


うーん。
Stateモナド使っても出来そうだけど