有代價的單源最短路徑

2021-06-20 15:19:49 字數 941 閱讀 9490

問題:有代價的單源最短路徑,並要求儲存路徑。(求最短的路徑,並使代價最小)

特點:* 儲存路徑:決定了難以用dijkstra,可以用flody,用path[i][j]表示 i 想走到 j 邁出的第一步。假設k是 i->j 的中間節點,更新時候用path[i][j] = path[i][k],具體做法見link。但是flody比較耗時(o(n^3))

* 有代價:如果想用flody的話,有要求代價最小,就需要將最短路相等的都記錄下來。邊一多代價更上去了。所以還是dfs比較方便。

例題:pat 1018(

這道題關鍵要想到用dfs,就好做了。code:

#include#include#includeusing namespace std;

#define n 505

int map[n][n];

vectorpath,min_path;

int bike[n];

bool visit[n];

#define inf 10000000

int dest,n,req;//req:require

int min_d,min_bring,min_back;

int cur_d,cur_bring,cur_back;

void dfs(int p)

else

}else

path.pop_back();

visit[i] = false;

cur_d-=map[p][i];

}} }

}int main()

min_d = min_bring = min_back = inf;

cur_d = cur_bring = cur_back = 0;

path.push_back(0);

dfs(0);

cout<%d",min_path[i]);

cout<<" "<

單源最短路徑

include define max 999 define maxverts 10 typedef struct graph void chushi graph g void dij graph int key,int int int main for i 1 i g.numverts i dij ...

單源最短路徑

最優子結構 最短路徑的子路徑也是最短路徑,動態規劃和貪心演算法的乙個重要指標。環路 一條最短路徑不可能包含環路 1 環路權重為負,如果有一條環路權重為負,則不存在最短路徑 2 環路權重為零,如果包含該環路,則將該環路去掉即可 3 環路權重為正,去掉改環路可以得到更短的路徑,因此不可能是最短路徑 最短...

單源最短路徑

單源最短路徑問題,即在圖中求出給定頂點到其他任一頂點的最短路徑。1.最短路徑的最優子結構性質 該性質描述為 如果p i,j 是從頂點i到j的最短路徑,k和s是這條路徑上的乙個中間頂點,那麼p k,s 必定是從k到s的最短路徑。證明 假設p i,j 是從頂點i到j的最短路徑,則有p i,j p i,k...