UVA - 821 - Page Hopping(floyd算法)

题意:用标号给定几个网站,一个标号(1~100)代表一个网站(标号的给定无连续性)。可以通过一个网站访问另一个网站(通过给定的有向图路径),题目保证任意两个网站都有路到达且输入无自环,求每两个网站访问,最少需要经过几个网站的个数平均值。

先重整标号使其有序,再用floyd算法求出每两个的最短路,最后统计即可。

 

 1 #include<cstdio>  
 2 #include<cstring>  
 3 #include<cctype>  
 4 #include<cstdlib>  
 5 #include<cmath>  
 6 #include<iostream>  
 7 #include<sstream>  
 8 #include<iterator>  
 9 #include<algorithm>  
10 #include<string>  
11 #include<vector>  
12 #include<set>  
13 #include<map>  
14 #include<deque>  
15 #include<queue>  
16 #include<stack>  
17 #include<list>  
18 typedef long long ll;  
19 typedef unsigned long long llu;  
20 const int MAXN = 100 + 10;  
21 const int MAXT = 10000 + 10;  
22 const int INF = 0x7f7f7f7f;  
23 const double pi = acos(-1.0);  
24 const double EPS = 1e-6;  
25 using namespace std;  
26   
27 int lur;  
28 double g[MAXN][MAXN];  
29 map<int, int> mp;  
30   
31 int getid(int x){  
32     if(mp.count(x))  return mp[x];  
33     return mp[x] = ++lur;  
34 }  
35   
36 void floyd(){  
37     for(int k = 1; k <= lur; ++k)  
38         for(int i = 1; i <= lur; ++i)  
39             for(int j = 1; j <= lur; ++j)  
40                 g[i][j] = min(g[i][j], g[i][k] + g[k][j]);  
41 }  
42   
43 void merge(int a, int b){  
44     int x = getid(a), y = getid(b);  
45     g[x][y] = 1;  
46 }  
47   
48 double solve(){  
49     floyd();  
50     double sum = 0, num = 0;  
51     for(int i = 1; i <= lur; ++i)  
52         for(int j = 1; j <= lur; ++j){  
53             if(i == j)  continue;  
54             num += 1, sum += g[i][j];  
55         }  
56     return sum / num;  
57 }  
58   
59 int main(){  
60     int a, b, cas = 0;  
61     while(scanf("%d%d", &a, &b) == 2 && (a || b)){  
62         for(int i = 0; i < MAXN; ++i)  for(int j = 0; j < MAXN; ++j)  g[i][j] = 1e9;  
63         mp.clear();  
64         lur = 0;  
65         merge(a, b);  
66         while(scanf("%d%d", &a, &b) == 2 && (a || b))  merge(a, b);  
67         printf("Case %d: average length between pages = %.3lf clicks\n", ++cas, solve());  
68     }  
69     return 0;  
70 }  

 

posted @ 2016-10-25 10:52  TianTengtt  阅读(102)  评论(0)    收藏  举报