View Code of Problem 3818

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


Back to problem 3818