最短路 Dijkstra模板

2021-08-13 19:33:59 字數 1152 閱讀 6443

普通dijkstra,複雜度o(n*n)

#include

using

namespace

std;

int n,m,f[105][105],dis[105];

bool b[105]; //n為總共的點數,m為路徑數,f陣列記錄兩個點的距離,dis陣列記錄每個點到原點的距離

int main()

memset(dis,1,sizeof(dis));

dis[1]=0;

for(int i=1;i<=n;i++)

if(f[1][i]) dis[i]=f[1][i]; //將剛開始與1點連線的點路徑記錄

for(int i=1;i<=n;i++)

}if(k==0) break;

b[k]=1;

dis[k]=mn;

for(int j=1;j<=n;j++)

if(dis[k]+f[k][j]//更新其餘點

dis[j]=dis[k]+f[k][j];

}printf("%d",dis[n]);

}

堆優化,複雜度o(mlog(n))。

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 10005,maxm = 500005;

struct edgeedge[maxm];

int n,m,st,cnt,head[maxn],dis[maxn];

bool vis[maxn];

struct cmp

};inline

void add(int bg,int ed,int w)

inline

void dijkstra()

}}int main()

dijkstra();

for(register

int i=1;i<=n;i++)

printf("%d ",dis[i]);

return

0;}

Dijkstra求最短路(最短模板)

給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,所有邊權均為正值。請你求出1號點到n號點的最短距離,如果無法從1號點走到n號點,則輸出 1。輸入格式 第一行包含整數n和m。接下來m行每行包含三個整數x,y,z,表示存在一條從點x到點y的有向邊,邊長為z。輸出格式 輸出乙個整數,表示1號點到n號...

最短路徑dijkstra模板

第一行兩個整數n m。n表示頂點個數 頂點編號為1 n m表示邊的條數。接下來m行表示,每行有3個數x y z。表示頂點x到頂點y邊的權值為z。求源點為1的最短路徑。題目 坐在馬桶上看演算法 演算法7 dijkstra最短路演算法 這道題我只是想練練dijkstra模板,dijkstra主要由兩個步...

最短路 Dijkstra演算法模板

最短路 dijkstra演算法 不能處理負權邊 未優化 時間複雜度為o n 2 n為頂點數 堆優化 時間複雜度大概為o m n logm m為邊數 模板題 未優化 p3371 模板 單源最短路徑 弱化版 模板題 堆優化 p4779 模板 單源最短路徑 標準版 code 未優化 include inc...