UVa 821 Page Hopping【Floyd】
2015-04-12 23:46
148 查看
题意:给出一个n个点的有向图,任意两个点之间都相互到达,求任意两点间最短距离的平均值
因为n很小,所以可以用floyd 建立出图,然后用floyd,统计d[][]不为0且不为INF的边的和及条数,就可以了
做的时候统计边的时候没有加不为0这个条件,改了好久= =
View Code
因为n很小,所以可以用floyd 建立出图,然后用floyd,统计d[][]不为0且不为INF的边的和及条数,就可以了
做的时候统计边的时候没有加不为0这个条件,改了好久= =
#include<iostream> #include<cstdio> #include<cstring> #include <cmath> #include<stack> #include<vector> #include<map> #include<set> #include<queue> #include<algorithm> using namespace std; typedef long long LL; const int INF = (1<<30)-1; const int mod=1000000007; const int maxn=1005; int d[maxn][maxn]; int main(){ int n,m,u,v,ans,kase=0; while(scanf("%d %d",&u,&v)!=EOF){ memset(d,0,sizeof(d)); if(u==0&&v==0) break; for(int i=1;i<=105;i++){ for(int j=1;j<=105;j++){ if(i==j) d[i][j]=0; else d[i][j]=INF; } } n=max(u,v);d[u][v]=1; while(scanf("%d %d",&u,&v)!=EOF){ if(u==0&&v==0) break; n=max(max(u,v),n); d[u][v]=1; } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(d[i][k]<INF&&d[k][j]<INF) d[i][j]=min(d[i][j],d[i][k]+d[k][j]); int sum=0,cnt=0; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(d[i][j]!=INF&&d[i][j]!=0) sum+=d[i][j],cnt++; double tmp=1.0*sum/cnt; printf("Case %d: average length between pages = %.3lf clicks\n",++kase,tmp); } return 0; }
View Code
相关文章推荐
- 【Uva 821】Page Hopping 翻译+题解
- UVA 821 Page Hopping——最短路
- 821 - Page Hopping (Floyd)
- UVA 821 Page Hopping 网页跳跃(BFS,简单)
- Page Hopping UVA - 821
- Uva 821 - Page Hopping
- UVA Page Hopping(Floyd算法)
- uva 821 Page Hopping 最短路floyd
- Uva821-Floyd
- uva 821 floyd
- UVa 10801 Lift Hopping / floyd
- 【UVA】821-Page Hopping(Floyd)
- UVa 10801 Lift Hopping / floyd
- Lift Hopping, UVa 10801【Floyd】
- [floyd]UVa821 - Page Hopping
- UVA 10801 Lift Hopping Floyd
- UVa #821 Page Hopping , UVa #820 Internet Bandwidth (习题11-1,11-3)
- UVA 821 Page Hopping (Floyd)
- Uva821 Page Hopping(最短路径Floyd应用)
- UVa 821 - Page Hopping(Floyd)