利用DP解決有代價的最短路徑

2022-05-04 17:51:09 字數 822 閱讀 2340

題目:無向圖g中有n個頂點,並通過一些邊相連線,邊的權值均為正數。初始時你身上有m元,當走過i點時,需要支付s(i)元,如果支付不起表示不能通過。請找出頂點1到頂點n的最短路徑。如果不存在則返回乙個特殊值,如果存在多條則返回最廉價的一條。限制條件:1分析:

/*這是網上的一種解法,我也不是很清楚狀態方程為啥是這樣列寫,因為我的的思路是第i個頂點過還是不過的話,就變成了經典dp問題,狀態方程有點類似於經典揹包問題,但是現在想來不能這樣考慮的,因為圖中有些頂點未必連通,用這種方式dp肯定會掛的。現在只能嘗試著把大佬的解法看懂啦*/

每一點與其他點的消耗權值的最小值都儲存在乙個二維陣列中

下乙個點的消耗的最小值可以根據前乙個點來得出,如果兩個點不相連,可以認為這兩點的權值無窮大

設乙個二維陣列初始化為無窮,再匯入權值初始值,再用狀態方程得出最小值儲存在陣列中。

狀態方程:l[k][j] = min(l[k][j],l[k][i]+l[i][j])。

code:

#define x 99999

using namespace std;

int min[100][100];

int state[100][100];

int i, j, k;

int min(int a, int b)

int main()

} //init

//搜尋圖,並記錄最小長度

for (int k = 0; k < 100; k++)

}} for (i = 1;i<100;i++)

system("pause");

return 0;

}

dp演算法之有代價的最短路徑

題目 有代價的最短路徑 題目介紹 如下圖所示,現在平面上有n個點,此時n 7,每個點可能和其他點相連,相連的線有一定權值,求出從0點到n 1點的消耗權值的最小值。分析 用動態規劃的思路來解決,每一點與其他點的消耗權值的最小值都儲存在乙個二維陣列中,下乙個點消耗的最小值可以根據前乙個點來得出。如果兩個...

有代價的單源最短路徑

問題 有代價的單源最短路徑,並要求儲存路徑。求最短的路徑,並使代價最小 特點 儲存路徑 決定了難以用dijkstra,可以用flody,用path i j 表示 i 想走到 j 邁出的第一步。假設k是 i j 的中間節點,更新時候用path i j path i k 具體做法見link。但是flod...

最短路徑 DP

平面內給出 n 個點,記橫座標最小的點為 a,最大的點為 b,現在zxd想要知道在每個點經過一次 a 點兩次 的情況下從 a 走到 b,再回到 a 的最短路徑。但他是個強迫症患者,他有許多奇奇怪怪的要求與限制條件 1.從 a 走到 b 時,只能由橫座標小的點走到大的點。2.由 b 回到 a 時,只能...