当前位置:   article > 正文

7-36 社交网络图中结点的“重要性”计算 (30 分)_7-12 社交网络图中结点的“重要性”计算

7-12 社交网络图中结点的“重要性”计算
  1. #include <iostream>
  2. #include <vector>
  3. #include <cstdio>
  4. #include <cstring>
  5. #define INF 0x3f3f3f
  6. #define maxn 10001
  7. using namespace std;
  8. int graph[maxn][maxn];
  9. int n,m;
  10. void init()
  11. {
  12. for(int i=1; i<=n; ++i)
  13. {
  14. for(int j=1; j<=n; ++j)
  15. {
  16. if(i==j)
  17. graph[i][j]=0;
  18. else
  19. graph[i][j]=INF;
  20. }
  21. }
  22. }
  23. void floyd()
  24. {
  25. for(int k=1; k<=n; ++k)
  26. {
  27. for(int i=1; i<=n; ++i)
  28. {
  29. for(int j=1; j<=n; ++j)
  30. {
  31. if(graph[i][j]>graph[i][k]+graph[k][j])
  32. {
  33. graph[i][j]=graph[i][k]+graph[k][j];
  34. }
  35. }
  36. }
  37. }
  38. }
  39. int main()
  40. {
  41. cin>>n>>m;
  42. init();
  43. for(int i=0; i<m; ++i)
  44. {
  45. int a,b;
  46. cin>>a>>b;
  47. graph[a][b]=1;
  48. graph[b][a]=1;
  49. }
  50. floyd();
  51. int f=0;//0表示连通 1表示不连通
  52. for(int j=1; j<=n; ++j)
  53. {
  54. if(graph[1][j]==INF)
  55. {
  56. f=1;
  57. break;
  58. }
  59. }
  60. int k;
  61. cin>>k;
  62. while(k--)
  63. {
  64. int num;
  65. cin>>num;
  66. double average=0;
  67. for(int j=1; j<=n; ++j)
  68. {
  69. if(graph[num][j]!=INF)
  70. average+=graph[num][j];
  71. }
  72. average=1.0/(average*1.0/(n-1));
  73. if(f==1)
  74. {
  75. printf("Cc(%d)=%.2f\n",num,0);
  76. }
  77. else
  78. printf("Cc(%d)=%.2f\n",num,average);
  79. }
  80. return 0;
  81. }

采用floyd求最短路很快ac了

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

闽ICP备14008679号