UVA 821 Page Hopping 网页跳跃(BFS,简单)
2015-07-18 17:04
696 查看
题意:
给一个无权有向图,可认为边的长度为1,求两点间的平均长度(即所有点对的长度取平均),保留3位小数。保证任意点对都可达。
思路:
简单题。直接穷举每个点,进行BFS求该点到其他点的距离。累加后除去边数即可。
AC代码
给一个无权有向图,可认为边的长度为1,求两点间的平均长度(即所有点对的长度取平均),保留3位小数。保证任意点对都可达。
思路:
简单题。直接穷举每个点,进行BFS求该点到其他点的距离。累加后除去边数即可。
#include <bits/stdc++.h> #define LL long long #define pii pair<int,int> #define INF 0x7f7f7f7f using namespace std; const int N=110; int g ; int dis ; map<int,int> mapp; int BFS(int s,int n) { memset(dis,0,sizeof(dis)); deque<int> que(1,s); dis[s]=INF; int len=0; while(!que.empty()) { len++; int siz=que.size(); for(int i=0; i<siz; i++) { int x=que.front(); que.pop_front(); for(int j=1; j<=n; j++) { if(!dis[j] && g[x][j]) { dis[j]=len; que.push_back(j); } } } } int ans=0; for(int i=1; i<=n; i++) if(dis[i]<INF) ans+=dis[i]; return ans; } double cal(int n) { int ans=0; for(int i=1; i<=n; i++) ans+=BFS(i, n); return (double)ans/(n*(n-1)); } int main() { freopen("input.txt", "r", stdin); int a, b, j=0; while(1) { mapp.clear(); memset(g,0,sizeof(g)); int cnt=0; while(scanf("%d%d",&a,&b),a+b) { if(!mapp[a]) mapp[a]=++cnt; if(!mapp[b]) mapp[b]=++cnt; g[mapp[a]][mapp[b]]=1; } if(!cnt) return 0; printf("Case %d: average length between pages = %.3f clicks\n", ++j, cal(cnt)); } return 0; }
AC代码
相关文章推荐
- 设置drawableTop、drawableLeft、drawableRight、drawableBottom图片大小
- linux c 获取网卡状态(UP or DOWN)
- Linux-命令-gzip
- <转>如何在CentOS 5/6上安装EPEL 源
- SSH Secure Shell Client用pub key认证登录linux
- 《学习OpenCV》第四章课后题2
- Linux-6.4-UDP
- ElasticSearch之Windows和Linux安装及插件
- 【Android架构综述篇】之应用程序、应用程序访问硬件的流程
- 《学习OpenCV》第四章课后题1-b&c
- RHCE7进阶第一天安装排错
- linux编译动态库和静态库的makefile示例
- tomcat开启SSL8443端口的方法 【文章内容仅供参考】
- Build/Launch EDKII emulator in Windows and Linux:编译/运行Windows和Linux环境下EDKII模拟器[4]
- shell中获得当前的日期
- Tomcat的安装
- 最简单的基于FFmpeg的AVUtil例子 (AVLog, AVOption等)
- Idea 14上的Web详细部署过程
- Project Euler 46 solution optimized using SSE2
- 深入理解Linux内核-内核同步