当前位置:   article > 正文

7-36 社交网络图中结点的“重要性”计算 (30 分) 不用迪杰斯特拉也不用弗洛伊德_对一个给定的社交网络图,找出其中大v结点。【基本思路】基本假设:(1) 不妨以

对一个给定的社交网络图,找出其中大v结点。【基本思路】基本假设:(1) 不妨以

原题:https://pintia.cn/problem-sets/15/problems/863

这种无权图的最短路径直接用类似于BFS的思路就可以计算了;

  1. #include<iostream>
  2. #include<queue>
  3. #define MAXSIZE 10010
  4. #define inf 666666666
  5. using namespace std;
  6. int N,M,K;
  7. int FLAG=1;
  8. int G[MAXSIZE][MAXSIZE];
  9. int dist[MAXSIZE];//距离
  10. void unweight(int x)//无权图的最短路径
  11. {
  12. int i;
  13. queue<int>q;
  14. for(i=1;i<=N;i++)dist[i]=-1;//初始化为-1
  15. q.push(x); //入队
  16. dist[x]=0;//并且自己到自己距离为0
  17. while(!q.empty())
  18. {
  19. int v=q.front();
  20. q.pop();
  21. for(i=1;i<=N;i++)
  22. {
  23. if(dist[i]==-1&&G[v][i]==1)//只要是-1的就说明还未访问过,并且v和I直接有边
  24. {
  25. dist[i]=dist[v]+1;//直接加1就行了
  26. q.push(i); //记得入队
  27. }
  28. }
  29. }
  30. }
  31. int main()
  32. {
  33. int i,j;
  34. double sum=0.0;
  35. scanf("%d%d",&N,&M);
  36. for(i=1;i<=M;i++)
  37. {
  38. int x,y;
  39. scanf("%d%d",&x,&y);
  40. G[x][y]=G[y][x]=1;
  41. }
  42. scanf("%d",&K);
  43. for(i=0;i<K;i++)
  44. {
  45. int x;
  46. scanf("%d",&x);
  47. unweight(x);//计算最短路径
  48. for(j=1;j<=N;j++)
  49. {
  50. if(j==x)continue;
  51. if(dist[j]==-1)
  52. {
  53. FLAG=0; break;
  54. }
  55. sum+=dist[j];
  56. }
  57. if(FLAG==1)
  58. {
  59. sum/=(N-1);
  60. printf("Cc(%d)=%.2f\n",x,1/sum);
  61. }
  62. else
  63. printf("Cc(%d)=0.00\n",x);
  64. sum=0;
  65. }
  66. return 0;
  67. }

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

闽ICP备14008679号