题意:求两点之间的最短距离,floyd模板
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int mmap[25][25];
void flo() {
for(int i=1; i<=20; i++)
for(int j=1; j<=20; j++)
for(int z=1; z<=20; z++) {
if(mmap[j][z] > mmap[j][i] + mmap[i][z]) {
mmap[j][z] = mmap[j][i]+mmap[i][z];
}
}
}
int main() {
int n;
int a;
int b;
int cas = 1;
while(scanf("%d", &n) != EOF) {
memset(mmap, 30, sizeof(mmap));
for(int i=0; i<n; i++) {
scanf("%d", &a);
mmap[1][a] = mmap[a][1] = 1;
}
for(int i=2; i<=19; i++) {
scanf("%d", &n);
for(int j=0; j<n; j++) {
scanf("%d", &a);
mmap[i][a] = mmap[a][i] = 1;
}
}
floyd();
scanf("%d", &n);
printf("Test Set #%d\n", cas++);
for(int i=0; i<n; i++) {
scanf("%d %d", &a, &b);
printf("%2d to %2d:%2d\n", a,b, mmap[a][b]);
}
printf("\n");
}
return 0;
}