题意,给出有向图,给定的节点之间长度为1,求出平均长度,既所有道路长度和/道路数量
分析:节点的个数最多为100个,那么直接floyd求就可以了,但是没有给出最大的节点n,需要自己求
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=105; 4 const int INF=1e7+5; 5 6 int m[maxn][maxn]; 7 8 int main(){ 9 int a,b,n,cas=1; 10 while(~scanf("%d%d",&a,&b)&&a+b){ 11 n=-1; 12 for(int i=0;i<maxn;i++) 13 for(int j=0;j<maxn;j++) 14 m[i][j]=INF; 15 for(int i=0;i<maxn;i++) 16 m[i][i]=0; 17 do{ 18 m[a][b]=1; 19 n=max(max(a,b),n); 20 }while(~scanf("%d%d",&a,&b)&&a+b); 21 n++; 22 for(int k=1;k<n;k++) 23 for(int i=1;i<n;i++) 24 for(int j=1;j<n;j++) 25 if(m[i][j]>m[i][k]+m[k][j]) 26 m[i][j]=m[i][k]+m[k][j]; 27 int sum=0,count=0; 28 29 for(int i=1;i<n;i++) 30 for(int j=1;j<n;j++) 31 if(m[i][j]<INF&&m[i][j]){ 32 count++; 33 sum+=m[i][j]; 34 } 35 printf("Case %d: ",cas++); 36 printf("average length between pages = %.3lf clicks ",1.0*sum/count); 37 } 38 return 0; 39 }