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; }