hdu-1874 畅通工程续 最短路径问题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874
弗洛伊德最短路径问题
代码:
#include<stdio.h>
#include<string.h>
#define inf 0x3f3f3f3f
#include<algorithm>
using namespace std;
int map[300][1010];
int main(){
int i,j,k,t;
int n,m,a,b,value,start,end;
while(~scanf("%d %d",&n,&m)){
for(i=0;i<n;i++)
for(j=0;j<n;j++)
map[i][j]=inf;
for(i=0;i<m;i++){
scanf("%d %d %d",&a,&b,&value);
if(map[a][b]>value)
map[a][b]=map[b][a]=value;
}
for(k=0;k<n;k++){
for(i=0;i<n;i++){
for(j=0;j<m;j++)
map[i][j]=min(map[i][j],map[i][k]+map[k][j]);
}
}
scanf("%d %d",&start,&end);
if(start==end)
printf("0\n");
else if(map[start][end]==inf)
printf("-1\n");
else
printf("%d\n",map[start][end]);
}
return 0;
}

浙公网安备 33010602011771号