UVA821 PageHopping (Floyd)
2015-08-28 22:27
344 查看
求所有点直接的平均最短距离,保存一下出现过的点,题目保证是所有点连通,Floyd求出最短路以后两个for统计一下。
#include<bits/stdc++.h> using namespace std; const int maxn = 101; int g[maxn][maxn]; bool vis[maxn]; vector<int> p; const int INF = 0x3f3f3f3f; int main() { //freopen("in.txt","r",stdin); int u,v,kas = 0; memset(g,0x3f,sizeof(g)); for(int i = 1; i < maxn; i++) g[i][i] = 0; while(scanf("%d%d",&u,&v),u){ p.clear(); memset(vis,0,sizeof(vis)); g[u][v] = 1; vis[u] = vis[v] = true; while(scanf("%d%d",&u,&v),u){ g[u][v] = 1; vis[u] = vis[v] = true; } for(int i = 1; i < maxn; i++){ if(vis[i]) p.push_back(i); } int sz = p.size(); for(int k = 0; k < sz; k++){ int m = p[k]; for(int i = 0; i < sz; i++){ int u = p[i]; if(g[u][m]<INF){ for(int j = 0; j < sz; j++){ int v = p[j]; g[u][v] = min(g[u][v],g[u][m]+g[m][v]); } } } } int sum = 0; for(int i = 0; i < sz; i++){ int u = p[i]; for(int j = 0; j < sz; j++) if(i!=j){ int v = p[j]; sum += g[u][v]; g[u][v] = INF; } } printf("Case %d: average length between pages = %.3lf clicks\n",++kas,(double)sum/(sz*(sz-1))); } return 0; }
相关文章推荐
- Linux下文件字符集编码转换
- 亿级用户下的新浪微博平台架构
- Linux的timerfd分析
- 树莓派deian的linux常用命令
- Linux 基础命令
- 12个Linux进程管理命令介绍
- Shell 脚本面试问题大全
- 一个Linux中用于监控的简易shell脚本
- [Fatal Error] :3:13: Open quote is expected for attribute "{1}" associated with an element type "id".
- MySQL 高可用浅析
- 运维规范:执行写入操作时,一定不要开两个分别连入不同主机的securCRT窗口
- Linux启动管理-系统修复模式
- NanoProfiler - 适合生产环境的性能监控类库 之 实践ELK篇
- 自定义Dialog,DatePickerDialog,TimePickerDialog,PopupWindow,Notification
- tomcat安装
- Linux平台上SQLite数据库教程(一)——终端使用篇
- 网站分析思维导图
- linux centos 6.3 图文安装教程
- 关于shell中的正则表达式和awk的使用
- 电子商务网站流量分析的三项指标分拆