/*
图论 : Floyd算法
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
const int MAXN = 21;
int G[MAXN][MAXN];
void floyd()
{
for(int k=1; k<MAXN; k++) {
for(int i=1; i<MAXN; i++) {
for(int j=1; j<MAXN; j++) {
if(G[i][j] > G[i][k] + G[k][j]) {
G[i][j] = G[i][k] + G[k][j];
}
}
}
}
}
void init()
{
for(int i=0; i<MAXN; i++) {
for(int j=0; j<MAXN; j++) {
G[i][j] = MAXN;
}
}
}
int main() {
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif
int T = 0, n;
int u, v;
while(scanf("%d", &n) == 1) {
init();
u = 1;
do {
for(int i=0; i<n; i++) {
scanf("%d", &v);
G[u][v] = 1;
G[v][u] = 1;
}
u++;
} while(u<20 && scanf("%d", &n));
floyd();
scanf("%d", &n);
printf("Test Set #%d\n", ++T);
for(int i=0; i<n; i++) {
scanf("%d%d", &u, &v);
printf("%2d to %2d: %d\n", u, v, G[u][v]);
}
printf("\n");
}
return 0;
}
UVa 567 - Risk
最新推荐文章于 2019-04-29 13:34:38 发布