821 - Page Hopping

#include<cstdio>
#include<iostream>
#include<cstring>
#define Infinity 1000000
#define MAX 100
using namespace std;
double mat[MAX+5][MAX+5],sum,counter;
int i,j,k,a,b,c,d,maximum,maximum1;

void Floyd()
{
    for(k=1; k<=maximum; k++)
    {
        for(i=1; i<=maximum; i++)
        {
            for(j=1; j<=maximum; j++)
            {
                if(mat[i][j]>mat[i][k]+mat[k][j])
                {
                    mat[i][j]=mat[i][k]+mat[k][j];
                }
            }
        }
    }
}

int main()
{
    int tc=0;
    while(scanf("%d%d",&a,&b)==2)
    {
        if(a==0 && b==0)
        {
            break;
        }
        maximum=max(a,b);
        mat[a][b]=1.0;
        for(;;)
        {
            scanf("%d%d",&c,&d);
            if(c==0 && d==0)
            {
                break;
            }
            maximum1=max(c,d);
            maximum=max(maximum,maximum1);
            mat[c][d]=1.0;
        }
        for(i=1; i<=maximum; i++)
        {
            for(j=1; j<=maximum; j++)
            {
                if(i!=j && mat[i][j]!=1)
                {
                    mat[i][j]=Infinity;
                }
            }
        }

        Floyd();

        sum=0.0;
        counter=0.0;
        for(i=1; i<=maximum; i++)
        {
            for(j=1; j<=maximum; j++)
            {
                if(mat[i][j]!=0.0 && mat[i][j]!=Infinity)
                {
                    counter++;
                    sum+=mat[i][j];
                }
            }
        }

        printf("Case %d: average length between pages = %.3lf clicks\n",++tc,sum/counter);

        memset(mat,0.0,sizeof(mat));
    }
    return 0;
}

0 comments: (+add yours?)