#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
const int N=510,INF=0x3f3f3f3f;
int n,m;
int g[N][N],dist[N];//dist[i]:点1到i的距离
bool st[N];//点是否加入了集合
int dijkstra()
{
memset(dist,0x3f,sizeof(dist));//将所有点设为不可达
dist[1]=0;
for(int i=0;i<n;i++)//n次操作
{
int t=-1;
for(int j=1;j<=n;j++)
{
if(!st[j]&&(t==-1||dist[t]>dist[j]))//点未在集合中且距离集合
//最近
{
t=j;
}
}
st[t]=true;//t点加入集合中
for(int j=1;j<=n;j++)
{
dist[j]=min(dist[j],dist[t]+g[t][j]);//更新距离
}
}
if(dist[n]>=0x3f3f3f3f) return -1;
return dist[n];
}
int main()
{
cin>>n>>m;
memset(g,0x3f,sizeof g);
while(m--)
{
int a,b,c;
cin>>a>>b>>c;
g[a][b]=min(g[a][b],c);
}
int t=dijkstra();
cout<<t<<endl;
return 0;
}
来源:CSDN
作者:晓屈
链接:https://blog.csdn.net/weixin_44488944/article/details/104127353