第一行兩個整數n m。n表示頂點個數(頂點編號為1~n),m表示邊的條數。接下來m行表示,每行有3個數x y z。表示頂點x到頂點y邊的權值為z。求源點為1的最短路徑。
題目**【坐在馬桶上看演算法】演算法7:dijkstra最短路演算法
這道題我只是想練練dijkstra模板,dijkstra主要由兩個步驟組成:
#include
#include
using
namespace
std;
#define inf 0x3f3f3f3f
#define max 100
//edge[i][j]記錄i到j的邊長,dis[i]記錄到i的最短路徑長,
//mask[i]記錄i點是否加入集合,pre[i]記錄i的最短路徑上i的前乙個點
int edge[max][max],dis[max],mask[max],pre[max];
int main()
else }}
//輸入邊長
int a,b,w;
for(int i=1;i<=m;i++)
//源點為1,所以看1周圍的點(沒有和1相鄰的點距離會是inf)
for(int i=1;i<=n;i++)
mask[1]=1;//1為源點,讓1被訪問過
//dijkstra核心操作如下
for(int i=1;i<=n-1;i++)
}//u加入集合
mask[u]=1;
//根據u去更新其他點到源點的距離,因為可能經過u中轉之後有的點和源點會更近(所以遍歷所有點)
for(int v=1;v<=n;v++)}}
//輸出最短路徑長度結果
for(int i=1;i<=n;i++)
cout
for(int i=1;i<=n;i++)
cout
<<"1"
0;}
輸入:
6 9
1 2 1
1 3 12
2 3 9
2 4 3
3 5 5
4 3 4
4 5 13
4 6 15
5 6 4
輸出:
0 1 8 4 13 17
1 2-1
3-4-2-1
4-2-1
5-3-4-2-1
6-5-3-4-2-1
最短路徑之 Dijkstra模板
一 時間複雜度為o v v 的dijkstra const int max v 100 10 const int inf 1 30 int cost max v max v 權值 int d max v 頂點 出發最短距離 bool used max v 以使用過的圖 int v 頂點數 int e...
最短路 路徑還原(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 最短路徑 針對有向圖,不支援負權值 圖的相鄰矩陣表示方法,還要用到最小值堆 include include define unvisited 0 define visited 1 define infinite 9999 設定最大值 define n 5 定義圖的頂點數 using...