UVa821 Page Hopping (Floyd)

链接:http://vjudge.net/problem/UVA-821

分析:利用Floyd求解,将所有有效边距离求和除以边数求平均值(注意:不包含自己到自己)。

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cstring>
 4 using namespace std;
 5
 6 const int maxn = 100 + 5;
 7 const int INF = 100000001;
 8
 9 int d[maxn][maxn];
10
11 int main() {
12     int u, v, kase = 0;
13     while (scanf("%d%d", &u, &v) == 2 && (u || v)) {
14         for (int i = 0; i < maxn; i++)
15             for (int j = 0; j < maxn; j++) d[i][j] = INF;
16         for (int i = 0; i < maxn; i++) d[i][i] = 0;
17         int n = 0; n = max(n, max(u, v));
18         d[u][v] = 1;
19         while (scanf("%d%d", &u, &v) && (u || v)) { n = max(n, max(u, v)); d[u][v] = 1; }
20         for (int k = 1; k <= n; k++)
21             for (int i = 1; i <= n; i++)
22                 for (int j = 1; j <= n; j++)
23                     d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
24         int sum = 0, cnt = 0;
25         for (int i = 1; i <= n; i++)
26             for (int j = 1; j <= n; j++)
27                 if (d[i][j] < INF && d[i][j])
28                     sum += d[i][j], cnt++;
29         printf("Case %d: average length between pages = %.3lf clicks\n", ++kase, 1.0 * sum / cnt);
30     }
31     return 0;
32 }
时间: 2024-10-07 02:20:31

UVa821 Page Hopping (Floyd)的相关文章

UVa 821 Page Hopping【Floyd】

题意:给出一个n个点的有向图,任意两个点之间都相互到达,求任意两点间最短距离的平均值 因为n很小,所以可以用floyd 建立出图,然后用floyd,统计d[][]不为0且不为INF的边的和及条数,就可以了 做的时候统计边的时候没有加不为0这个条件,改了好久= = 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include <cmath> 5 #include<stack&

UVa 821 - Page Hopping(Floyd)

给出能相互到达的网页,输出在给出的网页中相互到达需要点击几次,首先离散化,然后用Floyd求少点击次数,枚举求平均点击次数. #include<cstdio> #include<cstring> #include<algorithm> #include<map> using namespace std; const int maxn=110; const int inf=0x3f3f3f3f; int d[maxn][maxn]; map<int,in

821 - Page Hopping (Floyd)

很裸的Floyd水题,只需要注意一点: 题目中给的结点编号并不是完整的从1~n,不过没有关系,因为我们初始化为INF,当两点间距离不等于INF时相加就可以了. 细节参见代码: #include<bits/stdc++.h> using namespace std; const int maxn = 105; const int INF = 1000000; int a,b,n,d[maxn][maxn],kase = 0; void Floyd() { for(int k=1;k<=n;

UVA 10801 Lift Hopping Floyd

题目链接:UVA - 10801 题意描述:有n个电梯,给出每个电梯可以到达的楼层位置和电梯上升或下降一层楼的时间,另外在同一层楼换乘不同的电梯需要等待一分钟,问从楼层位置0(即地面)到第k层楼需要的最短时间是多少. 算法分析:由于n很小(n<100),所有可以用Floyd算法搞之.注意换乘电梯时需要加上那60秒即可了. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include&l

UVa 821 Page Hopping

题意: 给出一个有向图,求所有路径(两点间的最短路径)的平均值. 分析: 用floyd求两点间的最短距离,然后求平均就好. 代码: #include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;int dist[101][101];int maxn=100000001;int main(){ int a,b,n,cas=1; whil

UVA 821 Page Hopping 网页跳跃(BFS,简单)

题意:给一个无权有向图,可认为边的长度为1,求两点间的平均长度(即所有点对的长度取平均),保留3位小数.保证任意点对都可达. 思路:简单题.直接穷举每个点,进行BFS求该点到其他点的距离.累加后除去边数即可. 1 #include <bits/stdc++.h> 2 #define LL long long 3 #define pii pair<int,int> 4 #define INF 0x7f7f7f7f 5 using namespace std; 6 const int

【UVA】821-Page Hopping(Floyd)

模板题,求一个点到任何一点的距离,用Floyd就行了,结点不一定是从1 ~ n 的,所以需要记录结点的id 14063895 821 Page Hopping Accepted C++ 0.119 2014-08-19 10:00:27 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<vector> #include<sta

让被巡视对象摸不着规律

http://v.qq.com/page/l/o/t/x0414yqyi7y.htmlhttp://v.qq.com/page/4/z/l/t0414qgn8mp.htmlhttp://v.qq.com/page/p/c/r/j0414oxk8t7.htmlhttp://v.qq.com/page/l/5/1/f0414554cxg.htmlhttp://v.qq.com/page/f/f/o/w04144bi3ve.htmlhttp://v.qq.com/page/j/n/u/j04148kz

UVA821 floyd最短路+暴力

题意:给n条边,求每两个点之间的平均距离: 思路:数据是100条边,用floyd得到每两点之间的最短距离,然后遍历相加除以边的数目: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <algorithm> 6 #define N 110 7 #define INF 0x7ffffff 8 #define r