标签:
假如给你一个社交网络图,请你对每个节点计算符合“六度空间”理论的结点占结点总数的百分比。
终于来了道中文题 ,然而题意还是很绕。语文不好(掩面,逃)
BFS的考察 然而难点是在确定层数 所以咱们用一个last指向每一层的最后一个节点 当出队的节点==last的时候 level++
看AC代码吧 写的可能比较渣
1 #include "stdio.h" 2 3 int N,M; 4 int graph[10005][10005]; 5 int flag[10005]; 6 int BFS(int i); 7 main() 8 { 9 scanf("%d%d",&N,&M); 10 int i,j,v1,v2; 11 float count; 12 13 for(i=0;i<M;i++) 14 { 15 scanf("%d%d",&v1,&v2); 16 graph[v1][v2]=graph[v2][v1]=1; 17 } 18 19 for(i=1;i<=N;i++) 20 { 21 count=BFS(i); 22 for(j=1;j<=N;j++) 23 flag[j]=0; 24 printf("%d: %.2f%%\n",i,count*1.0/N*100); 25 } 26 } 27 28 int BFS(int i) 29 { 30 int vcount=1,start,end,q[10005],temp,j; 31 int last=i,level=0; 32 start=end=0; 33 q[end++]=i; 34 flag[i]=1; 35 while(start<end) 36 { 37 temp=q[start++]; 38 39 for(j=1;j<=N;j++) 40 { 41 if(flag[j]!=1 && graph[temp][j]==1) 42 { 43 q[end++]=j; 44 flag[j]=1; 45 vcount++; 46 } 47 } 48 49 50 if(q[start-1]==last) 51 { 52 level++; 53 last=q[end-1]; 54 } 55 if(level==6) 56 break; 57 } 58 return vcount; 59 }
标签:
原文地址:http://www.cnblogs.com/threezj/p/4543652.html