動態規劃 最短路徑跳箱子問題

2021-09-28 23:01:00 字數 1173 閱讀 1810

求從第乙個箱子跳到最後乙個箱子最短需要多少步 輸入乙個陣列 如[1,3,0,1,5] 表示第乙個箱子能最多往右跳1步 第二個最多往右跳3步 若不能跳到最後乙個箱子輸出-1 若開始就在最後乙個箱子輸出0;

假設輸入的陣列 為長度為n的 nums [n] 如:[1,3,0,1,5]

首先設定乙個陣列every_path[n],分別對應每乙個位置到最後乙個箱子的最短距離。

從後往前計算每個位置到最後乙個箱子的最小值:

n =4 時 every_path[4] = 0,本來就在最後乙個箱子;

n = 3 時 能往後走一步則檢視 n = 4的位置,every_path[3] = every_path[4]+1 = 1;

n = 2 時 因為是0 所以在n=2的位置永遠不可能到最後乙個位置,則every_path[2] = -1;

n = 1時 能往後走三步 所以min(every_path[4],every_path[3]),n=2時由於不能到達最後乙個位置所以不考慮

n = 0時 取every_path[1]+1;

則every_path[0] 就是我們要取的最小值。

實現**如下:

//jyy

//求從第乙個箱子跳到最後乙個箱子最短需要多少步 輸入乙個陣列 如[1,3,0,1,5]表示第乙個箱子能最多往右跳1步 第二個最多往右

//跳3步 若不能跳到最後乙個箱子輸出-1 若開始就在最後乙個箱子輸出0;

#include

#include

#include

using

namespace std;

vector<

int> nums;

intmain()

vector<

int>

every_path

(nums.

size()

);every_path[every_path.

size()

-1]=

0;for(

int i = every_path.

size()

-2;i>=

0;i--)}

every_path[i]

= temp;

} cout << every_path[0]

;return0;

}

動態規劃最短路徑問題

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

動態規劃實現最短路徑問題

一 設計最短路徑的動態規劃演算法 演算法導論 中一般將設計動態規劃演算法歸納為下面幾個步驟 1 分析最優解的結構 2 遞迴定義最優解的值 3 自底向上計算最優解的值 4 從計算的最優解的值上面構建出最優解 二 最短路徑的結構 從最優解的結構開始分析 我們假設沒有權值為負的路徑 對於圖g的所有結點對最...

動態規劃 最短路徑 Floyd演算法

正如我們所知道的,floyd演算法用於求最短路徑。floyd演算法可以說是warshall演算法的擴充套件,三個for迴圈就可以解決問題,所以它的時間複雜度為o n 3 floyd演算法的基本思想如下 從任意節點a到任意節點b的最短路徑不外乎2種可能 1是直接從a到b 2是從a經過若干個節點x到b。...