版权声明:欢迎转载!拒绝抄袭. https://blog.csdn.net/qq_36257146/article/details/88598226
水题来一发.
#include <iostream>
#include <bits/stdc++.h>
#define maxn 105
#define INF 0x3f3f3f3f
using namespace std;
int d[maxn][maxn];
int n;
void init()
{
memset(d,INF, sizeof(d));
for(int i = 0;i<maxn;i++)
d[i][i] = 0;
n = 0;
}
void floyd()
{
for(int k = 0;k<n;k++)
{
for(int i = 0;i<n;i++)
{
for(int j = 0;j<n;j++)
{
d[i][j] = min(d[i][j],d[i][k]+d[k][j]);
}
}
}
}
int main() {
int a,b;
int kase = 0;
while (cin>>a>>b&&a&&b)
{
init();
n = max(n,max(a,b));
d[a][b] = 1;
while (cin>>a>>b&&a&&b)
{
n = max(n,max(a,b));
d[a][b] = 1;
}
n++;
floyd();
int sum = 0;
int m = 0;
for(int i = 0;i<n;i++)
{
for(int j = 0;j<n;j++)
{
if(d[i][j]!=INF&&d[i][j])
{
sum+=d[i][j];
m++;
}
}
}
printf("Case %d: average length between pages = %.3f clicks\n",++kase,(1.0*sum)/m);
}
return 0;
}
/**
1 2 2 4 1 3 3 1 4 3 0 0
1 2 1 4 4 2 2 7 7 1 0 0
0 0
**/