板子题
#include <iostream> #include <cstring> #include <algorithm> #include <cstdio> #include <queue> using namespace std; const int maxn=100+10; int g[maxn][maxn]; const int inf=0x3f3f3f3f; int a,b; int main() { int Case=0; while(~scanf("%d%d",&a,&b)&&(a+b)) { memset(g,inf,sizeof(g)); int n=max(a,b); g[a][b]=1; while(~scanf("%d%d",&a,&b)&&(a+b)) { int nn=max(a,b); n=max(nn,n); g[a][b]=1; } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) g[i][j]=min(g[i][j],g[i][k]+g[k][j]); int ans=0; int kk=0; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(i!=j&&g[i][j]!=inf) { ans+=g[i][j]; kk++; } double aa=(double)ans; double bb=(double)kk; printf("Case %d: average length between pages = %.3f clicks\n",++Case,aa/bb); } return 0; }