天梯赛训练 六度空间(30 分)广搜

r囧r小猫 2022-05-30 11:19 259阅读 0赞

7-2 六度空间(30 分)

“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”如图1所示。

35
图1 六度空间示意图

“六度空间”理论虽然得到广泛的认同,并且正在得到越来越多的应用。但是数十年来,试图验证这个理论始终是许多社会学家努力追求的目标。然而由于历史的原因,这样的研究具有太大的局限性和困难。随着当代人的联络主要依赖于电话、短信、微信以及因特网上即时通信等工具,能够体现社交网络关系的一手数据已经逐渐使得“六度空间”理论的验证成为可能。

假如给你一个社交网络图,请你对每个节点计算符合“六度空间”理论的结点占结点总数的百分比。

输入格式:

输入第1行给出两个正整数,分别表示社交网络图的结点数N(1<N≤104,表示人数)、边数M(≤33×N,表示社交关系数)。随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个结点的编号(节点从1到N编号)。

输出格式:

对每个结点输出与该结点距离不超过6的结点数占结点总数的百分比,精确到小数点后2位。每个结节点输出一行,格式为“结点编号:(空格)百分比%”。

输入样例:

  1. 10 9
  2. 1 2
  3. 2 3
  4. 3 4
  5. 4 5
  6. 5 6
  7. 6 7
  8. 7 8
  9. 8 9
  10. 9 10

输出样例:

  1. 1: 70.00%
  2. 2: 80.00%
  3. 3: 90.00%
  4. 4: 100.00%
  5. 5: 100.00%
  6. 6: 100.00%
  7. 7: 100.00%
  8. 8: 90.00%
  9. 9: 80.00%
  10. 10: 70.00%

要用vector存边,不然会超内存。

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<math.h>
  4. #include<iostream>
  5. #include<string>
  6. #include<algorithm>
  7. #include<map>
  8. #include<queue>
  9. #include<vector>
  10. using namespace std;
  11. int vis[10005];
  12. struct circle
  13. {
  14. int cir,s;
  15. }c[10005];
  16. int main()
  17. {
  18. int n,m,i,j,x,y,sum;
  19. circle co;
  20. queue<circle> q;
  21. vector<int> v[10005];
  22. scanf("%d%d",&n,&m);
  23. memset(vis,0,sizeof vis);
  24. for(i=0;i<m;i++)
  25. {
  26. scanf("%d%d",&x,&y);
  27. v[x].push_back(y);
  28. v[y].push_back(x);
  29. }
  30. for(i=1;i<=n;i++)
  31. {
  32. memset(vis,0,sizeof vis);
  33. sum=1;
  34. vis[i]=1;
  35. co.cir=i;
  36. co.s=0;
  37. q.push(co);
  38. while(!q.empty())
  39. {
  40. circle co2=q.front();
  41. q.pop();
  42. for(j=0;j<v[co2.cir].size();j++)
  43. {
  44. if(vis[v[co2.cir][j]]==0&&co2.s<=5)
  45. {
  46. sum++;
  47. co.cir=v[co2.cir][j];
  48. co.s=co2.s+1;
  49. q.push(co);
  50. vis[v[co2.cir][j]]=1;
  51. }
  52. }
  53. }
  54. printf("%d: %.2lf%%\n",i,1.0*sum/n*100);
  55. }
  56. }

发表评论

表情:
评论列表 (有 0 条评论,259人围观)

还没有评论,来说两句吧...

相关阅读