数据结构实验36——用弗洛伊德算法求赋权图的两点间的最短路径的长度

Description

用弗洛伊德算法求任意两点间的最短路径的长度

Input

先输入一个小于100的正整数n,然后输入图的邻接矩阵(10000表示无穷大,即两点之间没有边),之后再输入一个小于100的正整数m,最后的m行每行输入两个不同的0到n-1之间的整数表示两个点。

Output

用弗洛伊德算法求任意两点间的最短路径的长度,并输出这些两个点之间的最短路径的长度。

  • Sample Input 
    4
    0 2 10 10000
    2 0 7 3
    10 7 0 6
    10000 3 6 0
    2
    0 2
    3 0
  • Sample Output
    9
    5

#include<stdio.h>
#define MAX 10000

int matr[100][100];
int n, m, x, y;

void init(){
	int i, j;
	scanf("%d", &n);
	for(i = 0; i < n; i++){
		for(j = 0; j < n; j++){
		    scanf("%d", &matr[i][j]);
		}
	}
}

void search(){
    int i, j, k;
	for(k = 0; k < n; k++){
		for(i = 0; i < n; i++){
			for(j = 0; j < n; j++){
				if(matr[i][k] + matr[k][j] < matr[i][j]){
				     matr[i][j] = matr[i][k] + matr[k][j];
				}
			}
		}
	}
}

void output(){
     scanf("%d", &m);
	 while(m--){
	     scanf("%d %d", &x, &y);
		 printf("%d\n",matr[x][y]);
	 } 
}

int main(){
     init();
	 search();
	 output();
	 return 0;
}

猜你喜欢

转载自blog.csdn.net/chengchencheng/article/details/80452716