Uva821-Floyd
计算所有页面的平均距离。
用floyd求距离,再求平均
#include <algorithm> #include <cstring> #include <ctype.h> #include <cstdlib> #include <cstdio> #include <vector> #include <string> #include <queue> #include <stack> #include <cmath> #include <set> #include <map> using namespace std; const int maxn = 110; const int INF = 100000; int N,M,T; int d[maxn][maxn]; set <int> pages; int main() { int a,b; while(scanf("%d%d",&a,&b) && a&&b) { T++; N = 0; pages.clear(); pages.insert(a); pages.insert(b); for(int i=0;i<maxn;i++) for(int j=0;j<maxn;j++) d[i][j] = ( i==j ? 0 : INF); N = max(a,b); d[a][b] = 1; while(scanf("%d%d",&a,&b) && a && b) { d[a][b] = 1; N = max(N,max(a,b)); pages.insert(a); pages.insert(b); } 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(d[i][j] < INF) sum+=d[i][j]; } N = (int)pages.size(); double ans = double(sum) / double(N*(N-1)); printf("Case %d: average length between pages = %.3f clicks\n",T,ans); } }