#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int INF=1<<30; int cost[300][300]; int d[300]; bool used[300]; int a,b,c,D,e,f,g;//a是顶点数 void dijkstra(int s) {int mine,v; fill(d,d+a,INF); fill(used,used+a,false); d[s]=0; for(int i = 0;i<a;i++) d[i] = cost[s][i]; for(int i=1;i<a;i++) { mine=INF; for(int u=0;u<a;u++) { if(!used[u]&&d[u]<mine) {mine=d[u]; v=u;} } used[v]=true; for(int u=0;u<a;u++) {if(d[u]>d[v]+cost[v][u]&&!used[u]) d[u]=d[v]+cost[v][u]; } } } int main() { while(cin>>a>>b) { for(int i = 0; i<200; i++) { for(int j = 0; j<200; j++) cost[i][j] = INF; cost[i][i] = 0; } for(int i=0;i<b;i++) { cin>>c>>D>>e; if(cost[c][D]>e) cost[D][c]=cost[c][D]=e; } cin>>f>>g; dijkstra(f); printf("%d\n",d[g]==INF?-1:d[g]); } return 0; }
hdu 1874 dijkstra算法
最新推荐文章于 2022-02-28 17:37:16 发布
本文介绍了一个使用Dijkstra算法解决带权图中单源最短路径问题的C++实现。通过输入顶点数量、边的数量及边的具体信息,该程序能够找到从指定起点到其他各点的最短路径。
1782

被折叠的 条评论
为什么被折叠?



