2014年9月6日土曜日

140906

Ruby


経路の和(ver.1.0)
テキストファイルに以下のような行列が書かれている。

11,66,55,33
22,20,99,77
66,46,42,11
99,44,21,96
88,20,70,33

左上から右下までを下方向と右方向のみ移動するとき、
経路の和の最小値を求めよ。

a = []
size = 0
ARGF.each_line{|line| 
  ary = line.chomp.split(/,/).map(&:to_i)
  @size = ary.size
  a << ary
  size += 1
}

for i in (0..size - 1)
  for j in (0..@size - 1)
    if i == 0                # 一行目二列目以降は左だけ
      if j != 0
        a[i][j] += a[i][j - 1]
      end
    elsif j == 0             # 二行目以降の一列目は上だけ
      a[i][j] += a[i - 1][j]
    else                     # 二行目以降の二列目以降は左と上
      a[i][j] += [a[i][j - 1], a[i - 1][j]].min
    end
  end
end

p a[-1][-1]

出力結果
265

ちなみに以下の経路

11,66,55,33
22,20,99,77
66,46,42,11
99,44,21,96
88,20,70,33

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。