题目链接:https://www.luogu.org/problemnew/show/P2299#sub
裸的迪杰斯特拉(我是在考试前复习一下板子)
1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #include<cstdio> 5 using namespace std; 6 const int maxx=0x7fffffff; 7 int dis[10001],map[2501][2501],n,m,x,y,w; 8 bool b[10001]; 9 int main() 10 { 11 memset(map,0x7f,sizeof(map)); 12 scanf("%d%d",&n,&m); 13 for(int i=1;i<=m;i++) 14 { 15 scanf("%d%d%d",&x,&y,&w); 16 if(w<map[x][y]) 17 { 18 map[x][y]=w; 19 map[y][x]=w; 20 } 21 } 22 for(int i=1;i<=n;i++) dis[i]=map[1][i]; 23 24 memset(b,0,sizeof(b)); 25 26 dis[1]=0; 27 b[1]=1; 28 29 for(int i=1;i<=n-1;i++) 30 { 31 int minn=maxx; 32 int k=0; 33 for(int j=1;j<=n;j++) 34 if(!b[j]&&dis[j]<minn) 35 { 36 minn=dis[j]; 37 k=j; 38 } 39 if(k==0) break; 40 b[k]=1; 41 for(int j=1;j<=n;j++) 42 dis[j]=min(dis[j],dis[k]+map[k][j]); 43 } 44 cout<<dis[n]; 45 return 0; 46 }