您的位置:首页 > 运维架构

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

2015-07-18 17:04 696 查看
题意:

  给一个无权有向图,可认为边的长度为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代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: