习题11-1 网页跳转 uva821

来源:互联网 发布:手机淘宝怎么更改评价 编辑:程序博客网 时间:2024/04/28 19:28

题目:https://vjudge.net/problem/UVA-821

见紫书P379

这题我没看到题目已经假定任意两点之间有路,不然还要保存给的点,有了这条件就简单多了,G[i][j]!=INF就说明i和j是给出的两个点(有路),直接循环两次,只要距离小于INF,就累加。

#include<bits/stdc++.h>const int maxn=105;const int INF=0x3f3f3f3f;typedef long long LL;using namespace std;int G[maxn][maxn];int N;void floyd(){for(int k=1;k<=100;k++)for(int i=1;i<=100;i++)for(int j=1;j<=100;j++)G[i][j]=min(G[i][j],G[i][k]+G[k][j]);}int main(){//freopen("E:\\ACM\\test.txt","r",stdin);int Case=1;int s,e;while(cin>>s>>e,s+e){memset(G,INF,sizeof(G));for(int i=0;i<maxn;i++) G[i][i]=0;G[s][e]=1;while(cin>>s>>e,s+e) G[s][e]=1;floyd();double sum=0;for(int i=1;i<=100;i++){for(int j=1;j<=100;j++){if(i!=j&&G[i][j]<INF) //关键这里  sum+=G[i][j];}}sum/=N*(N-1);printf("Case %d: average length between pages = %.3f clicks\n",Case++,sum);}return 0;}


原创粉丝点击