多源最短路
【题目描述】
已知n个点(n<=100),给你n*n的方阵,a[i,j]表示从第i个点到第j个点的直接距离。
现在有Q个询问,每个询问两个正整数,a和b,让你求a到b之间的最短路程。
满足a[i,j]=a[j,i]。
【输入描述】
第一行一个正整数n,接下来n行每行n个正整数,满足a[i,i]=0,再一行一个Q,接下来Q行,每行两个正整数a和b。
【输出描述】
一共Q行,每行一个整数。
【样例输入】
3
0 1 1
1 0 3
1 3 0
1
2 3
【样例输出】
2
源代码: #include<cstdio> #include<cstring> int n,i[101][101]; int main() //弗洛伊德算法。 { memset(i,0x3f,sizeof(i)); //初始化最大值。 scanf("%d",&n); for (int a=1;a<=n;a++) for (int b=1;b<=n;b++) { scanf("%d",&i[a][b]); i[b][a]=i[a][b]; } for (int a=1;a<=n;a++) for (int b=1;b<=n;b++) for (int c=1;c<=n;c++) i[b][c]=i[b][c]>i[b][a]+i[a][c]?i[b][a]+i[a][c]:i[b][c]; scanf("%d",&n); for (int a=1;a<=n;a++) { int t1,t2; scanf("%d%d",&t1,&t2); printf("%d\n",i[t1][t2]); } return 0; }