水,全源无权最短路,Floyd一次完事了
#include<stdio.h>
#include<string.h>
#include<limits.h>
int main()
{
int cs = 0, count, d[21][21];
while (scanf("%d", &count) != EOF)
{
int k, i, j, t;
for (i = 1; i <= 20; i++)
for (j = 1; j <= 20; j++)
d[i][j] = i == j ? 0 : INT_MAX;
for (i = 0; i < count; i++)
{
scanf("%d", &t);
d[1][t] = d[t][1] = 1;
}
for (i = 2; i <= 19; i++)
{
scanf("%d", &count);
for (j = 0; j < count; j++)
{
scanf("%d", &t);
d[i][t] = d[t][i] = 1;
}
}
for (k = 1; k <= 20; k++)
for (i = 1; i <= 20; i++)
for (j = 1; j <= 20; j++)
if (d[i][k] != INT_MAX && d[k][j] != INT_MAX
&& d[i][k] + d[k][j] < d[i][j])
d[i][j] = d[i][k] + d[k][j];
int m, from, to;
scanf("%d", &m);
printf("Test Set #%d\n", ++cs);
for (i = 0; i < m; i++)
{
scanf("%d %d", &from, &to);
printf("%d to %d: %d\n", from, to, d[from][to]);
}
puts("");
}
return 0;
}