当前位置:   article > 正文

半个【弗洛伊德算法】2-3 社交网络图中结点的“重要性”计算 (25分)_社交评估25分

社交评估25分

2-3 社交网络图中结点的“重要性”计算 (25分)

在社交网络中,个人或单位(结点)之间通过某些关系(边)联系起来。他们受到这些关系的影响,这种影响可以理解为网络中相互连接的结点之间蔓延的一种相互作用,可以增强也可以减弱。而结点根据其所处的位置不同,其在网络中体现的重要性也不尽相同。

“紧密度中心性”是用来衡量一个结点到达其它结点的“快慢”的指标,即一个有较高中心性的结点比有较低中心性的结点能够更快地(平均意义下)到达网络中的其它结点,因而在该网络的传播过程中有更重要的价值。在有N个结点的网络中,结点v​i​​的“紧密度中心性”Cc(v​i​​)数学上定义为v​i​​到其余所有结点v​j​​ (j≠i) 的最短距离d(v​i​​,v​j​​)的平均值的倒数:

对于非连通图,所有结点的紧密度中心性都是0。

给定一个无权的无向图以及其中的一组结点,计算这组结点中每个结点的紧密度中心性。

输入格式:

输入第一行给出两个正整数N和M,其中N(≤10​4​​)是图中结点个数,顺便假设结点从1到N编号;M(≤10​5​​)是边的条数。随后的M行中,每行给出一条边的信息,即该边连接的两个结点编号,中间用空格分隔。最后一行给出需要计算紧密度中心性的这组结点的个数K(≤100)以及K个结点编号,用空格分隔。

输出格式:

按照Cc(i)=x.xx的格式输出K个给定结点的紧密度中心性,每个输出占一行,结果保留到小数点后2位。

输入样例:

  1. 9 14
  2. 1 2
  3. 1 3
  4. 1 4
  5. 2 3
  6. 3 4
  7. 4 5
  8. 4 6
  9. 5 6
  10. 5 7
  11. 5 8
  12. 6 7
  13. 6 8
  14. 7 8
  15. 7 9
  16. 3 3 4 9

输出样例:

  1. Cc(3)=0.47
  2. Cc(4)=0.62
  3. Cc(9)=0.35

中间的节点再三层循环可以放最外边,也可以放中间 

但是不能放里边

  1. #include<iostream>
  2. #include<vector>
  3. using namespace std;
  4. int main(){
  5. int n,m;
  6. cin>>n>>m;
  7. vector<vector<int>>v;
  8. for(int i=0;i<n;i++){
  9. vector<int>vv(n);
  10. for(int a=0;a<n;a++)vv[a]=999999;
  11. vv[i]=0;
  12. v.push_back(vv);
  13. }
  14. for(int i=0;i<m;i++){
  15. int a,b;
  16. cin>>a>>b;
  17. v[a-1][b-1]=1;
  18. v[b-1][a-1]=1;
  19. }
  20. for(int a=0;a<n;a++){
  21. for(int c=0;c<n;c++){
  22. for(int b=0;b<n;b++){
  23. if(v[a][b]>v[a][c]+v[c][b]){
  24. v[a][b]=v[a][c]+v[c][b];
  25. v[b][a]=v[a][b];
  26. }
  27. }
  28. }
  29. }
  30. vector<int>num(n);
  31. for(int a=0;a<n;a++){
  32. for(int b=0;b<n;b++)num[a]+=v[a][b];
  33. }
  34. int p,s;
  35. cin>>p;
  36. for(int i=0;i<p;i++){
  37. cin>>s;
  38. printf("Cc(%d)=%.2f\n",s,(n-1)/(1.0*num[s-1]));
  39. }
  40. return 0;
  41. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/677454
推荐阅读
相关标签
  

闽ICP备14008679号