码迷,mamicode.com
首页 > 其他好文 > 详细

PAT 六度空间

时间:2015-06-01 13:18:20      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

六度空间

 

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

 

终于来了道中文题 ,然而题意还是很绕。语文不好(掩面,逃)

 

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 }

 

PAT 六度空间

标签:

原文地址:http://www.cnblogs.com/threezj/p/4543652.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!