#include<iostream>
#include<cstring>
using namespace std;
const int N = 505,M =1e5+5;
int graph[N][N];
int dis[N],vis[N];
int n,m;
void dijkstra(){
memset(dis,0x3f,sizeof dis);
dis[1]=0;
//每次更新一个点,贪心的思想
for(int i=0;i<n;i++){
int t=-1;
//寻找到未访问结点最小值的下标
for(int j=1;j<=n;j++){
if(vis[j]==0&&(t==-1||dis[j]<dis[t])){
t=j;
}
}
vis[t]=1;
//更新
for(int j=1;j<=n;j++){
dis[j]=min(dis[j],dis[t]+graph[t][j]);
}
}
if(dis[n]!=0x3f3f3f3f){
cout<<dis[n]<<endl;
}else{
cout<<-1<<endl;
}
}
int main(){
cin>>n>>m;
memset(graph,0x3f,sizeof graph);
while(m--){
int a,b,c;
cin>>a>>b>>c;
//解决重边和自环问题
graph[a][b] = min(graph[a][b],c);
}
dijkstra();
return 0;
}
dijsktra算法模板+板子题
最新推荐文章于 2024-08-24 14:08:21 发布