#include <bits/stdc++.h> using namespace std; #define INF 99999999 int n,m,x,u,v; int e[1000][1000]; int main() { while(cin>>n>>m>>x) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(i==j) e[i][j] = 0; else e[i][j] = INF; } }//初始化,任意两点间距离为无穷大(宏定义的一个很大的数) for(int i=0;i<m;i++) { cin>>u>>v; cin>>e[u][v]; e[v][u]=e[u][v]; }//给m个边赋值 for(int k=1;k<=n;k++) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(e[i][j]>e[i][k]+e[k][j]) { e[i][j] = e[i][k]+e[k][j]; }//如果小于原来的距离则更新成小的那个距离 } } }//!!!!!!!!!!! 以k点为中间经过点,看看能否更新ij点间的距离(当i到k到j<i到j时更新) for(int i=0;i<x;i++) { cin>>u>>v; cout<<e[u][v]<<endl; }//输出任意两点的最短距离 } return 0; } |
Double click to view unformatted code.