单源最短路+正权图+稠密图---->朴素版dijstra
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 const int N=510; 5 int g[N][N],dis[N]; 6 bool st[N]; 7 int n,m; 8 int dijstra(){ 9 memset(dis,0x3f,sizeof(dis)); 10 dis[1]=0; 11 for(int i=0;i<n;i++){ 12 int t=-1; 13 for(int j=1;j<=n;j++){ 14 if(!st[j]&&(t==-1||dis[j]<dis[t])){ 15 t=j; 16 } 17 }//找还没被确定的点中 到 已经确定的点集中最近的点 18 st[t]=true; 19 for(int j=1;j<=n;j++){ 20 dis[j]=min(dis[j],dis[t]+g[t][j]); 21 }//松弛 22 } 23 if(dis[n]==0x3f3f3f3f) return -1; 24 return dis[n]; 25 } 26 int main(void){ 27 memset(g,0x3f,sizeof(g)); 28 cin>>n>>m; 29 for(int i=0;i<m;i++){ 30 int a,b,c; 31 cin>>a>>b>>c; 32 g[a][b]=min(g[a][b],c); 33 } 34 cout<<dijstra(); 35 return 0; 36 }