题目链接:寒假集训-最短路练习 - Virtual Judge (csgrandeur.cn)
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<queue>
#include<map>
typedef long long ll;
using namespace std;
int mxm=1<<29;
int mp[1005][1005];
int p[1005];
int d[1005];//到第i个点的路程是多少
int n,m;
void check(){
memset(p,0,sizeof (p));
for(int i=1;i<=n;i++){
d[i]=mp[1][i];
}//初始化从1开始的距离
int v,min;
for(int i=1;i<=n;i++){
min=mxm;
for(int j=1;j<=n;j++){
if(p[j]==0&&d[j]<min){
min=d[j];
v=j;
}
}//找最小的距离的点
p[v]=1;//标记找到的点
for(int j=1;j<=n;j++){
if(p[j]==0&&d[j]>min+mp[v][j])
d[j]=min+mp[v][j];
}
}
cout<<d[n]<<endl;
}
int main(){
while(cin>>m>>n){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j) mp[i][j]==0;
else {
mp[i][j]=mxm;
}
}
}
for(int i=0;i<m;i++){
int a,b,c;
cin>>a>>b>>c;
if(mp[a][b]>c){
mp[a][b]=mp[b][a]=c;
}
}
check();
}
}