#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#define M 100
using namespace std;
int NODE[M],LIST[M][M],adjNo[M];
int BFS(int);
int FindID(int,int);
int main()
{
register int x,y,i,k=1,p,n,xid,yid;
double avg;
//freopen("in.txt","r",stdin);
while(scanf("%d%d",&x,&y)&&(x|y))
{
n = 2;
NODE[0] = x;
NODE[1] = y;
LIST[0][adjNo[0]++] = 1;
while(scanf("%d%d",&x,&y)&&(x|y))
{
xid = FindID(x,n);
yid = FindID(y,n);
if(xid<0)xid = n++,NODE[xid] = x;
if(yid<0)yid = n++,NODE[yid] = y;
LIST[xid][adjNo[xid]++] = yid;
}
avg = 0;p = n*(n-1);
for(i=0;i<n;i++)
avg += BFS(i);
avg /= p;
printf("Case %d: average length between pages = %0.3lf clicks\n",k++,avg);
memset(NODE,0,sizeof(NODE));
memset(LIST,0,sizeof(LIST));
memset(adjNo,0,sizeof(adjNo));
}
return 0;
}
int FindID(int node,int n)
{
int i;
for(i=0;i<n;i++)
if(NODE[i] == node)
return i;
return -1;
}
int BFS(int s)
{
int color[M],d[M],sum = 0;
int i,x,h;
queue<int>Q;
memset(color,0,sizeof(color));
color[s] = 1,d[s] = 0;
Q.push(s);
while(!Q.empty())
{
h = Q.front();
Q.pop();
for(i=0;i<adjNo[h];i++)
{
x = LIST[h][i];
if(!color[x])
{
color[x] = 1;
d[x] = d[h] + 1;
sum += d[x];
Q.push(x);
}
}
}
return sum;
}
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.