日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

SSL 1460——最小代价问题

發(fā)布時(shí)間:2023/11/27 生活经验 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SSL 1460——最小代价问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Description

設(shè)有一個(gè)n×m(小于100)的方格(如圖所示),在方格中去掉某些點(diǎn),方格中的數(shù)字代表距離(為小于100的數(shù),如果為0表示去掉的點(diǎn)),試找出一條從A(左上角)到B(右下角)的路徑,經(jīng)過的距離和為最小(此時(shí)稱為最小代價(jià)),從A出發(fā)的方向只能向右,或者向下。


Sample Input

4 4
4 10 7 0
3 2 2 9
0 7 0 4
11 6 12 1
Sample Output

(1,1)->(2,1)->(2,2)->(2,3)->(2,4)->(3,4)->(4,4)
24


首先現(xiàn)將最上面那行和最左邊那行定初值。
用f[i,j]來判斷這個(gè)點(diǎn)是否為0如果為0,則為TRUE。
那么我們就可以用兩重循環(huán),來枚舉行和列。如果這個(gè)點(diǎn)可以走,那就判斷是從上面走下來比較下,還是從左邊走過來比較小。還要判斷左邊或上面是否為0。
f[i,j]:=max(f[i-1,j]+a[i,j],f[i,j-1]+a[i,j]);
如果從上面來,則d[i,j]=2;從左來則為1。
最后倒推回去,找到路線和最終的最小代價(jià)值。


代碼如下:

var  i,j,n,m:longint;a,k,d:array[-1..101,-1..101]of longint;f:array[-1..101,-1..101]of boolean;procedure dg(x,y:longint);
beginif (x=1)and(y=1) then begin write('(',x,',',y,')'); exit; end;if d[x,y]=1 then dg(x,y-1) else dg(x-1,y);write('->(',x,',',y,')');
end;beginreadln(n,m);fillchar(f,sizeof(f),false);for i:=1 to n dobeginfor j:=1 to m dobeginread(a[i,j]);if a[i,j]=0 then begin a[i,j]:=maxlongint; f[i,j]:=true; end;k[i,j]:=maxlongint div 2;end;readln;end;for i:=1 to m doif f[1,i]=false thenbegink[1,i]:=k[1,i-1]+a[1,i];d[1,i]:=1;end;for i:=2 to n doif f[i,1]=false thenbegink[i,1]:=k[i-1,1]+a[i,1];d[i,1]:=2;endelse break;for i:=2 to n dofor j:=2 to m doif f[i,j]=false thenif ((k[i-1,j]+a[i,j])<(k[i,j-1]+a[i,j]))and(f[i-1,j]=false) thenbegind[i,j]:=2;k[i,j]:=k[i-1,j]+a[i,j];endelseif f[i,j-1]=false thenbegind[i,j]:=1;k[i,j]:=k[i,j-1]+a[i,j];end;dg(n,m);writeln;writeln(k[n,m]-a[n,m]);
end.

轉(zhuǎn)載于:https://www.cnblogs.com/Comfortable/p/8412392.html

總結(jié)

以上是生活随笔為你收集整理的SSL 1460——最小代价问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。