单源最短路Dijkstra算法源码

xiaoxiao2021-02-28  91

#include<iostream> #include<algorithm> #include<cstring> using namespace std; int a[1010][1010]; int dis[1010]; bool b[1010]; const int inf=0xfffffff; int m,n,s; int add(int x,int y){ if(x+y>inf) return inf; return x+y; } int main(){ cin>>n>>m>>s; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(i!=j) a[i][j]=inf; for(int i=1;i<=n;i++) dis[i]=inf; dis[s]=0; for(int i=1;i<=m;i++){ int u,v,w; cin>>u>>v>>w; a[u][v]=w; } for(int i=1;i<n;i++){ int minx=inf,minp=-1; for(int j=1;j<=n;j++) if(dis[j]<minx && b[j]==false){ minp=j; minx=dis[j]; } b[minp]=true; for(int j=1;j<=n;j++) dis[j]=min(dis[j],add(dis[minp],a[minp][j])); } for(int i=1;i<=n;i++){ if(dis[i]>=inf) cout<<2147483647<<" "; else cout<<dis[i]<<" "; } cout<<endl; return 0; }
转载请注明原文地址: https://www.6miu.com/read-83321.html

最新回复(0)