普通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...