【解题思路】
最短路模板题,可以使用朴素Dijkstra算法,Dijkstra堆优化算法,SPFA算法.
【参考代码】
#include <bits/stdc++.h>
using namespace std;
const int N=2005;
const int INF=2139062143;
int w[N][N],dis[N],pre[N];
bool sign[N];
int n,m,minn;
void Dijkstra(int n){
int k;
dis[1]=0;pre[1]=0;
for(int j=1;j<=n;j++){
minn=INF;
for(int i=1;i<=n;i++)
if(!sign[i] && dis[i]<minn){
minn=dis[i];
k=i;
}
sign[k]=true;
for(int i=1;i<=n;i++){
if(dis[k]+w[k][i]<dis[i]){
dis[i]=dis[k]+w[k][i];
}
}
}
}
int main()
{
cin>>n>>m;
int a,b,c;
memset(w,0x7f,sizeof(w));
memset(dis,0x7f,sizeof(dis));
for(int i=1;i<=n;i++) w[i][i]=0;
for(int i=1;i<=m;i++){
cin>>a>>b>>c;
w[a][b]=w[b][a]=min(c,w[a][b]);
}
Dijkstra(n);
if(dis[n]>=INF) cout<<-1;
else cout<<dis[n];
return 0;
}