单元最短路模板 dijistra

xiaoxiao2021-02-27  221

#include<iostream> #include<cstdio> #include<cstring> #include<vector> const int maxn=10000+10,inf=1000000000; using namespace std; struct node{int to,w;}; int d[maxn],p[maxn]; vector<node> e[maxn]; void add(int x,int y,int z){ node t; t.to=y; t.w=z; e[x].push_back(t); } int main(){ int i,j,k,m,n,x,y,z,s; cin>>n>>m>>s; for(i=1;i<=m;i++){ scanf("%d%d%d",&x,&y,&z); add(x,y,z); } for(i=1;i<=n;i++)d[i]=inf; d[s]=0; for(i=1;i<=n;i++){ int mins=inf; for(j=1;j<=n;j++) if(!p[j] && d[j]<mins){ mins=d[j];k=j; } p[k]=1; for(j=0;j<e[k].size();j++){ node v=e[k][j]; if(d[v.to]>d[k]+v.w)d[v.to]=d[k]+v.w; } } for(i=1;i<=n;i++) if(d[i]<inf)printf("%d ",d[i]); else printf("2147483647 "); return 0; }
转载请注明原文地址: https://www.6miu.com/read-11127.html

最新回复(0)