#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int inf=10000010;//最大值开大点,题意与测试数据不符
int map[1010][1010];
int used[1010],dis[1010],n;
void Dijskra(){
int i,j,k;
for(i=1;i<=n;i++){
dis[i]=inf;
used[i]=0;
}
dis[1]=0;
for(i=1;i<=n;i++){
int temp=inf;
for(j=1;j<=n;j++){
if(!used[j]&&dis[j]<temp){
temp=dis[j];
k=j;
}
}
used[k]=1;
for(j=1;j<=n;j++){
if(dis[j]>dis[k]+map[k][j]){
dis[j]=dis[k]+map[k][j];
}
}
}
}
int main(){
int m,i,j,a,b,v;
while(~scanf("%d%d",&m,&n)){
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
map[i][j]=inf;
}
}
for(i=0;i<m;i++){
scanf("%d%d%d",&a,&b,&v);//注意重边
if(map[a][b]>v||map[b][a]>v) map[a][b]=map[b][a]=v;
}
Dijskra();
printf("%d\n",dis[n]);
}
return 0;
}
poj 2387 Til the Cows Come Home(Dijskra算法)
最新推荐文章于 2021-01-13 21:43:40 发布