#include <stdio.h> #define Max 0x3fffffff int map[50][50];//临接矩阵 int min(int x,int y){ return x>y?y:x; } int main(){ int n,m,k,t; int i,j,beginNum,endNum; while(scanf("%d %d %d",&n,&m,&t)!=EOF){ for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ if(i == j){ map[i][j] = 0; } else{ map[i][j] = Max; } } } for(i=1;i<=m;i++){ int a,b,c; scanf("%d %d %d",&a,&b,&c); map[a][b]=map[b][a]=c; } for(k=1;k<=n;k++){ for(i=1;i<=n;i++){//代表ij间最短距离 for(j=1;j<=n;j++){ map[i][j] = min(map[i][j] , map[i][k] + map[k][j]); } } } for(i=0;i<t;i++){ scanf("%d %d",&beginNum,&endNum); printf("%d\n",map[beginNum][endNum]); } } } |
Double click to view unformatted code.