Uva821-Floyd

计算所有页面的平均距离。

用floyd求距离,再求平均

#include <algorithm>
#include <cstring>
#include <ctype.h>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <string>
#include <queue>
#include <stack>
#include <cmath>
#include <set>
#include <map>

using namespace std;

const int maxn = 110;
const int INF = 100000;

int N,M,T;
int d[maxn][maxn];
set <int> pages;

int main()
{
    int a,b;
    while(scanf("%d%d",&a,&b) && a&&b)
    {
        T++;
        N = 0;
        pages.clear();
        pages.insert(a);
        pages.insert(b);

        for(int i=0;i<maxn;i++)
            for(int j=0;j<maxn;j++)
                d[i][j] = ( i==j ? 0 : INF);

        N = max(a,b);
        d[a][b] = 1;

        while(scanf("%d%d",&a,&b) && a && b)
        {
            d[a][b] = 1;
            N = max(N,max(a,b));
            pages.insert(a);
            pages.insert(b);
        }

        for(int k=1;k<=N;k++)
            for(int i=1;i<=N;i++)
                for(int j=1;j<=N;j++)
                    d[i][j] = min(d[i][j],d[i][k] + d[k][j]);

        int sum = 0;
        for(int i=1;i<=N;i++)
            for(int j=1;j<=N;j++)
            {
                if(d[i][j] < INF) sum+=d[i][j];
            }
        N = (int)pages.size();
        double ans = double(sum) / double(N*(N-1));
        printf("Case %d: average length between pages = %.3f clicks
",T,ans);
    }
}
原文地址:https://www.cnblogs.com/helica/p/4892381.html