#include<bits/stdc++.h>
using namespace std;
const int N=510;
int g[N][N],n,m;//稀疏图用邻接表存储,稠密图用邻接矩阵存储。
int dis[N];
bool st[N];
void dijkstra(){
memset(dis,0x3f,sizeof(dis));
dis[1]=0;
for(int i=1;i<=n-1;i++){
int t=n+1;//小细节,t的初始值为一个不在1~n范围内的数
for(int j=1;j<=n;j++){
if(!st[j]&&dis[j]<dis[t]){
t=j;
}
}
st[t]=true;
for(int j=1;j<=n;j++){
dis[j]=min(dis[j],dis[t]+g[t][j]);
}
}
if(dis[n]==0x3f3f3f3f){
cout<<"-1";
}
else{
cout<<dis[n];
}
}
int main(){
memset(g,0x3f,sizeof(g));
cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y,z;
cin>>x>>y>>z;
if(x!=y){
g[x][y]=min(g[x][y],z);
}
}
dijkstra();
return 0;
}
AcWing 849. Dijkstra求最短路 I(最短路)
最新推荐文章于 2024-05-23 00:22:50 发布