最短路徑路徑還原

2021-07-05 21:37:01 字數 1201 閱讀 4213

#include #include #include #include #include using namespace std;

struct edge;

const int max_e = 10000; //最大邊數

const int max_v = 10000; //最大頂點數

const int inf = 10000; //最大距離

edge es[max_e]; //邊集合

int v,e; //v是頂點數,e是邊數

int d[max_v]; //最短距離

int cost[max_v][max_v]; //cost[u][v]表示邊e=(u,v)的權值,(不存在時,用inf表示)

bool used[max_v]; //已用頂點,表示在確定最短路徑的那個集合中

int prev[max_v]; //最短路徑上的前驅結點

//不能有負邊

//該演算法的核心思想如下:

//從起點開始,算出起點到每個點的最短距離,不斷加入距離最短的頂點,修改從起點到每個點的最短距離,直至所有頂點加入

//以下實現演算法,在第一次迴圈的時候會算出起點s到每乙個頂點的最短距離

void shortpath_dijkstra(int s)

}if(v == -1)

used[v] = true; //置v為已使用頂點

//更新從v->i的最短路徑

for(int i = 0; i < v; ++i)}}

}vectorget_path(int t)

reverse(path.begin(),path.end());

return path;

}int main()

}for(int i = 0; i < e; ++i)

shortpath_dijkstra(s);

vectorpath = get_path(6);

vector::iterator it;

for(it = path.begin(); it != path.end(); ++it)

cout << endl;

for(int i = 0; i < v; ++i)

return 0;

}

最短路 路徑還原(dijkstra,模板)

b.wzy的大冒險 出發咯qaq 單點時限 2.0 sec 記憶體限制 512 mb 第一行兩個數n,m 1 n 103,1 m 103 接下來m行,每行三個數x,y,z,表示點 x 與點 y 之間有一條權值為 z 的有向邊 1 x,y,z 103 第一行乙個整數表示 1 到 n 的最短距離 第二行...

Dijkstra 最短路還原路徑

dijkstra鏈結 我們求最短路最常用的就是dijkstra演算法,然而我們在很多時候需要列印出這條最短的路徑,這時我們就要想乙個辦法來儲存路徑,這裡我們借助一點點類似於並查集的思想,就是用乙個path陣列來儲存從原點開始到達這個點的最短路徑的上一步,簡單來說就是我們從哪個點到的這個點,舉個例子吧...

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號城市到其他城市的最短路,如果無法到達,輸出...