UVa 821- Page Hopping(Floyd)

来源:互联网 发布:盐城办公软件培训 编辑:程序博客网 时间:2024/06/05 01:01

给出能相互到达的网页,输出在给出的网页中相互到达需要点击几次,首先离散化,然后用Floyd求少点击次数,枚举求平均点击次数。

#include<cstdio>#include<cstring>#include<algorithm>#include<map>using namespace std;const int maxn=110;const int inf=0x3f3f3f3f;int d[maxn][maxn];map<int,int> id;int main(){    int n,u,v,t=0;    while(~scanf("%d%d",&u,&v)&&(u||v)){        memset(d,0x3f,sizeof d);        id.clear();        n=0;        if(!id.count(u)) id[u]=++n;        if(!id.count(v)) id[v]=++n;        d[id[u]][id[v]]=1;        while(~scanf("%d%d",&u,&v)&&(u||v)){            if(!id.count(u)) id[u]=++n;            if(!id.count(v)) id[v]=++n;            d[id[u]][id[v]]=1;        }        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(i!=j&&d[i][j]!=inf) sum+=d[i][j];        printf("Case %d: average length between pages = %.3lf clicks\n",++t,double(sum)/(n*(n-1)));    }    return 0;}
0 0
原创粉丝点击