経路の和(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 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。