Aug 28, 2010 11:53
А вот и динамическое программирование (на функциональное пока не похоже):
let m = matrix [[2.;0.;2.;0.;7.];
[1.;3.;1.;12.;9.];
[0.;1.;2.;100.;100.];
[4.;7.;7.;10.;10.];
[5.;1.;9.;9.;9.]]
let weight (m:matrix)=
let rows=m.NumRows
let cols=m.NumCols
let n = Matrix.zero rows cols
for r = (rows-1) downto 0 do
for c = (cols-1) downto 0 do
let mutable l:float list=[]
if (c if (r if (c if l.IsEmpty then n.[r,c]<-m.[r,c]
else
n.[r,c]<-m.[r,c]+List.min l;
n.[0,0]
let wt = weight m
printfn "min weight: %A" wt
Этот вариант находит решение за 25 шагов. А в предыдущем варианте за 800.
f#,
быдлокод