• Uva821 Page Hopping (Floyd)


    题目大意:

    最近的研究表明,互联网上任何一个网页在平均情况下最多只需要单击19次就能到达任
    意一个其他网页。如果把网页看成一个有向图中的结点,则该图中任意两点间最短距离的平
    均值为19。
    输入一个n(1≤n≤100)个点的有向图,图中任意两点之间都相互可达,求任意两点间最
    短距离的平均值。输入保证没有自环。

    思路:

    通过floyd算法跑出所有点之间的距离,然后遍历一遍就可以出结果了,因为n<=100,所以能够不超时

    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <queue>
    #include <map>
    #include <vector>
    #include <algorithm>
    #include <iostream>
    using namespace std;
    #define inf 0x3f3f3f3f
    typedef long long ll;
    const int maxn=105; 
    #define rep(i,n) for(int i=0;i<(n);i++) 
    
    int n=0;
    int dp[maxn][maxn];
    
    void floyd(){
        rep(k,n+1){
            rep(i,n+1){
                rep(j,n+1){
                    dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]);
                }
            }
        }
    }
    
    void solve(int cas){
        double ans=0,cnt=0;
        rep(i,n+1){
            rep(j,n+1){
                if(i!=j&&dp[i][j]!=inf){
                    ans+=dp[i][j];
                    cnt++;
                }
            }
        }
        printf("Case %d: average length between pages = %.3lf clicks
    ",cas,ans/cnt);
    }
    
    int main(){
        int a,b;
        int cas=1;
        while(scanf("%d%d",&a,&b)==2&&!(!a&&!b)){
            n=0;
            if(n<max(a,b))n=max(a,b);
            memset(dp,inf,sizeof(dp));
            dp[a][b]=1;
            while(scanf("%d%d",&a,&b)==2&&!(!a&&!b)){
                dp[a][b]=1;
                if(n<max(a,b))n=max(a,b);
            }
            floyd();
            solve(cas);
            cas++;
        }    
    }
    
    
  • 相关阅读:
    Robotium源码分析之Instrumentation进阶
    路飞学城Python-Day115
    路飞学城Python-Day114
    路飞学城Python-Day113
    【逻辑回归的特征筛选方法】
    路飞学城Python-Day108
    路飞学城Python-Day107
    【算法学习】神经网络
    路飞学城Python-Day100
    路飞学城Python-Day101
  • 原文地址:https://www.cnblogs.com/87hbteo/p/8951493.html
Copyright © 2020-2023  润新知