Dijkstra(n^2版)
1 #define IO std::ios::sync_with_stdio(0) 2 #include <bits/stdc++.h> 3 #define pb push_back 4 using namespace std; 5 typedef long long ll; 6 const int N=1005; 7 struct node{ 8 int x; 9 int dis; 10 }; 11 const int Maxv=2147483647; 12 vector<node>G[N]; 13 int n,m,s; 14 int d[N]; 15 int vis[N]; 16 void dijkstra(){ 17 fill(d+1,d+1+n,Maxv);//不能用memset,巨坑 18 d[s]=0; 19 for(int i=1;i<=n;i++){ 20 int u=-1; 21 int mi=Maxv; 22 for(int j=1;j<=n;j++){ 23 if(!vis[j]&&d[j]<mi){ 24 mi=d[j]; 25 u=j; 26 } 27 } 28 if(u==-1)return; 29 vis[u]=1; 30 for(int j=0;j<G[u].size();j++){ 31 int v=G[u][j].x; 32 if(!vis[v]){ 33 int dis=G[u][j].dis; 34 if(d[u]+dis<d[v])d[v]=d[u]+dis; 35 } 36 } 37 } 38 } 39 40 int main(){ 41 IO; 42 cin>>n>>m>>s; 43 for(int i=1;i<=m;i++){ 44 int u,v,w; 45 cin>>u>>v>>w; 46 G[u].pb((node){v,w}); 47 } 48 dijkstra(); 49 for(int i=1;i<=n;i++)cout<<d[i]<<" "; 50 51 } 52 53 /* 54 55 4 6 1 56 1 2 2 57 2 3 2 58 2 4 1 59 1 3 5 60 3 4 3 61 1 4 4 62 63 */