View Code of Problem 3818

#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.


Back to problem 3818