题目链接
https://www.luogu.org/problemnew/show/P1339
最短路
解题思路
dijkstra直接过
注意:
- 双向边
- memset ma数组要在读入之前
AC代码
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 int n,m,ts,te; 5 int dist[2505]; 6 bool ok[2505]; 7 int ma[2505][2505]; 8 int main(){ 9 cin>>n>>m>>ts>>te; 10 memset(ma,0x3f,sizeof(ma)); 11 for(int i=1;i<=m;i++){ 12 int a,b,c; 13 cin>>a>>b>>c; 14 ma[a][b]=c; 15 ma[b][a]=c; 16 } 17 memset(dist,0x3f,sizeof(dist)); 18 dist[ts]=0; 19 for(int i=1;i<=n;i++){ 20 int mmm,minn=0x3f3f3f; 21 for(int j=1;j<=n;j++){ 22 if(!ok[j]&&dist[j]<minn){ 23 minn=dist[j]; 24 mmm=j; 25 } 26 } 27 ok[mmm]=1; 28 if(ok[te]==1) break; 29 for(int k=1;k<=n;k++){ 30 dist[k]=min(dist[k],dist[mmm]+ma[mmm][k]); 31 } 32 } 33 cout<<dist[te]; 34 return 0; 35 }