#include<bits/stdc++.h>
using namespace std;
const int N=510;
int n,m;
int g[N][N];
int d[N];//到起点距离
bool st[N];
int dijkstra()
{
memset(d,0x3f,sizeof d);//初始化
d[1]=0;//1到地点为零
for(int i=0;i<n;i++)
{
int t=-1;//
for(int j=1;j<=n;j++)
if(!st[j]&&(t==-1||d[t]>d[j]))//如果这个数还没用过并且是当前最小
t=j;
st[t]=true;//标记
for(int j=1;j<=n;j++)
d[j]=min(d[j],d[t]+g[t][j]);//修改距离
}
if(d[n]==0x3f3f3f3f)//检查终点
return -1;
return d[n];
}
signed 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);//可能有重边(取最小)
}
cout<<dijkstra();
}
dijkstra朴素算法
最新推荐文章于 2025-05-02 09:49:25 发布