题157.2021秋周练习-2-3 社交网络图中结点的“重要性”计算 (25 分)

2023-10-27 23:30

本文主要是介绍题157.2021秋周练习-2-3 社交网络图中结点的“重要性”计算 (25 分),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 题157.2021秋周练习-2-3 社交网络图中结点的“重要性”计算(Floyd/bfs) (25 分)
  • 一、题目
  • 二、题解


题157.2021秋周练习-2-3 社交网络图中结点的“重要性”计算(Floyd/bfs) (25 分)


一、题目

在这里插入图片描述
在这里插入图片描述

二、题解

本题要你求其余点到给定源点的距离总和的平均值的倒数,主要问题在于如何求其余点到给定源点的距离。方法一是直接用Floyd求多源最短路径,后面直接对源点到其余点距离求和就好。方法二是由于是无权图,所以问一次就使用一次bfs求单源最短路径,bfs结束距离之和就求出来了。虽然这里表面看都用了三层循环,但是用bfs的法子在最后一个测试点会快很多,因为这里bfs有一层循环是由K决定的,而K最大才100,然而Floyd循环都是N决定的,N最大直接10的四次方了。

//Floyd多源最短路径
#include <bits/stdc++.h>using namespace std;const int Inf=100100;int N,M;
int G[10010][10010];void init()//原本想用fill初始化的,但是那样会内存超限!!!
{for(int i=1;i<=N;i++){for(int j=1;j<=N;j++){if(i==j)//自己到自己初始化为0{G[i][j]=0;}else{G[i][j]=Inf;G[j][i]=Inf;}}}
}void Floyd()//Floyd求多源最短路径
{for(int k=1; k<=N; k++){for(int i=1; i<=N; i++){for(int j=1; j<=N; j++){if(G[i][k]<Inf&&G[k][j]<Inf&&G[i][j]>G[i][k]+G[k][j])//为了防止相加时数据溢出,所以在加之前的判断前加了个前提--中介边得连通{G[i][j]=G[i][k]+G[k][j];G[j][i]=G[j][k]+G[k][i];}}}}
}int main()
{cin>>N>>M;init();//一定要在N输入之后再初始化呀!!!for(int i=0; i<M; i++){int v1,v2;scanf("%d%d",&v1,&v2);G[v1][v2]=1;G[v2][v1]=1;}Floyd();int K;cin>>K;int flag=1;for(int i=0; i<K; i++){int s;scanf("%d",&s);int distsum=0;if(flag){for(int v=1; v<=N; v++){distsum+=G[s][v];}if(distsum>=Inf){printf("Cc(%d)=0.00\n",s);flag=0;}else{printf("Cc(%d)=%.2f\n",s,(N-1)/(float)distsum);}}else{printf("Cc(%d)=0.00\n",s);}}
}

在这里插入图片描述

//bfs单源最短路径
#include <bits/stdc++.h>using namespace std;int N,M;
int G[10010][10010];
int dist[10010];//记录下标表示的节点到源点的距离
int distsum;int bfs(int s)//直接bfs找无权图单源最短路径
{fill(dist,dist+10010,-1);//dist初始化为-1,表示未被访问过,没有距离int count0=N;//用于判断是否用一次bfs遍历完所有的顶点从而判断是否图连通queue<int> q;int v,w;dist[s]=0;distsum+=dist[s];//更新总距离q.push(s);count0--;//遍历到一个顶点数目减1while(!q.empty()){v=q.front();q.pop();for(w=1;w<=N;w++){if(G[v][w]==1&&dist[w]==-1){dist[w]=dist[v]+1;//因为w是由v到的,所以s到w距离为s到v的距离加1distsum+=dist[w];//更新总距离q.push(w);count0--;//遍历到一个顶点数目减1}}}if(count0==0)//所有的顶点都遍历了{return 1;}else{return 0;}
}int main()
{cin>>N>>M;for(int i=0; i<M; i++){int v1,v2;scanf("%d%d",&v1,&v2);G[v1][v2]=1;G[v2][v1]=1;}int K;cin>>K;int flag=1;for(int i=0; i<K; i++){int s;scanf("%d",&s);distsum=0;if(flag==1){if(bfs(s)){printf("Cc(%d)=%.2f\n",s,(N-1)/(float)distsum);}else{printf("Cc(%d)=0.00\n",s);flag=0;}}else{printf("Cc(%d)=0.00\n",s);}}
}

在这里插入图片描述


这篇关于题157.2021秋周练习-2-3 社交网络图中结点的“重要性”计算 (25 分)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/289161

相关文章

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1(高级消息队列协议)是一种网络协议,它允许遵从该协议的客户端(Publisher或者Consumer)应用程序与遵从该协议的消息中间件代理(Broker,如RabbitMQ)进行通信。 AMQP 0-9-1模型的核心概念包括消息发布者(producers/publisher)、消息(messages)、交换机(exchanges)、

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

【Rust练习】12.枚举

练习题来自:https://practice-zh.course.rs/compound-types/enum.html 1 // 修复错误enum Number {Zero,One,Two,}enum Number1 {Zero = 0,One,Two,}// C语言风格的枚举定义enum Number2 {Zero = 0.0,One = 1.0,Two = 2.0,}fn m

MySql 事务练习

事务(transaction) -- 事务 transaction-- 事务是一组操作的集合,是一个不可分割的工作单位,事务会将所有的操作作为一个整体一起向系统提交或撤销请求-- 事务的操作要么同时成功,要么同时失败-- MySql的事务默认是自动提交的,当执行一个DML语句,MySql会立即自动隐式提交事务-- 常见案例:银行转账-- 逻辑:A给B转账1000:1.查询

html css jquery选项卡 代码练习小项目

在学习 html 和 css jquery 结合使用的时候 做好是能尝试做一些简单的小功能,来提高自己的 逻辑能力,熟悉代码的编写语法 下面分享一段代码 使用html css jquery选项卡 代码练习 <div class="box"><dl class="tab"><dd class="active">手机</dd><dd>家电</dd><dd>服装</dd><dd>数码</dd><dd

计算数组的斜率,偏移,R2

模拟Excel中的R2的计算。         public bool fnCheckRear_R2(List<double[]> lRear, int iMinRear, int iMaxRear, ref double dR2)         {             bool bResult = true;             int n = 0;             dou