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