陣列最短路徑規劃

2021-08-28 11:07:35 字數 1444 閱讀 4431

尋找一條從陣列左上角arr[0][0]到右下角arr[m-1][n-1]的路線,使得沿線經過陣列的數值之和最小。

遞迴法倒著來分析:最後一步到達arr[m-1][n-1]只有兩條路,即通往arr[m-2][n-1]到達或者通往arr[m-1][n-2]到達,最後一步選擇的路線為min,同理可遞迴選擇到arr[m-2][n-1]或arr[m-1][n-2]的路徑。這種遞迴方法效率太低,因為裡面有大量的重複計算過程。

動態規劃法

動態規劃其實也是一種空間換取時間的演算法,通過快取計算的中間值,從而減少重複計算的次數。動態規劃採用正向求解,以便利用前面計算的結果。f(i,j)=min+arr[i][j],從i=1,j=1開始遍歷二維陣列,可以在遍歷的過程中求出所有的f(i,j)的值。同時,把求出的值儲存到另外乙個二維陣列cache[i][j]中以供後續使用。

public class helloworld

public static

intgetminpath

(int

arr)

public static

void

main

(string[

] args),,

};system.out.

println

(getminpath

(arr));

//結果為17

}}

輸出結果為:

17
public class helloworld

for(

int j=

1;j)//遍歷二維陣列,取最小的路徑存入剩餘的cache中

for(

int i=

1;i)else}}

system.out.

println

("["

+(row-1)

+","

+(col-1)

+"]");

return cache[row-1]

[col-1]

;}public static

void

main

(string[

] args),,

};system.out.

println

("路徑為:");

system.out.

println

("最小值為:"

+getminpath

(arr));

}}

執行結果為:

路徑為:

[0,1]

[0,2]

[2,1]

[2,2]

[2,2]

最小值為:17

動態規劃最短路徑問題

最短路徑問題 下圖給出了一張地圖,地圖中每個頂點代表乙個城市,兩個城市間的連線代表道路,連線上的數值代表道路長度,求從a地到e地的最短路徑。分析 本題可以利用深度搜尋法求解,偽 如下 vars 未訪問的城市集合 dist i,j 儲存任意兩個城市間的距離陣列 function search city...

Codeup最短路徑 最短路徑

n個城市,標號從0到n 1,m條道路,第k條道路 k從0開始 的長度為2 k,求編號為0的城市到其他城市的最短距離。第一行兩個正整數n 2 n 100 m m 500 表示有n個城市,m條道路,接下來m行兩個整數,表示相連的兩個城市的編號。n 1行,表示0號城市到其他城市的最短路,如果無法到達,輸出...

Codeup最短路徑 最短路徑問題

給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。輸入n,m,點的編號是1 n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數 s,t 起點s,...