7-7 六度空间(30 分)
生活随笔
收集整理的這篇文章主要介紹了
7-7 六度空间(30 分)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
“六度空間”理論又稱作“六度分隔(Six Degrees of Separation)”理論。這個理論可以通俗地闡述為:“你和任何一個陌生人之間所間隔的人不會超過六個,也就是說,最多通過五個人你就能夠認識任何一個陌生人。”如圖1所示。
圖1 六度空間示意圖
“六度空間”理論雖然得到廣泛的認同,并且正在得到越來越多的應用。但是數十年來,試圖驗證這個理論始終是許多社會學家努力追求的目標。然而由于歷史的原因,這樣的研究具有太大的局限性和困難。隨著當代人的聯絡主要依賴于電話、短信、微信以及因特網上即時通信等工具,能夠體現社交網絡關系的一手數據已經逐漸使得“六度空間”理論的驗證成為可能。
假如給你一個社交網絡圖,請你對每個節點計算符合“六度空間”理論的結點占結點總數的百分比。
輸入格式:
輸入第1行給出兩個正整數,分別表示社交網絡圖的結點數N(1,表示人數)、邊數M(≤,表示社交關系數)。隨后的M行對應M條邊,每行給出一對正整數,分別是該條邊直接連通的兩個結點的編號(節點從1到N編號)。
輸出格式:
對每個結點輸出與該結點距離不超過6的結點數占結點總數的百分比,精確到小數點后2位。每個結節點輸出一行,格式為“結點編號:(空格)百分比%”。
輸入樣例:
10 9 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10輸出樣例:
1: 70.00% 2: 80.00% 3: 90.00% 4: 100.00% 5: 100.00% 6: 100.00% 7: 100.00% 8: 90.00% 9: 80.00% 10: 70.00%解題思路:1.對每個結點使用廣度優先搜索距離小于6的結點,并統計個數
2.使用層數(level)來表示距離,其中本結點為第0層,距離1的結點為第1層…
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 #define MAXVEX 10005 5 6 void CreateGraph( ); 7 int BFSTraverse(int i); 8 9 int G[MAXVEX][MAXVEX],Nv,Ne; 10 int visited[MAXVEX]; 11 12 int main() 13 { 14 int i,j; 15 int count; 16 double b; 17 CreateGraph(); 18 for( i=1; i<=Nv; i++) 19 { 20 count = BFSTraverse(i); 21 b = 100.0*count/Nv; 22 printf("%d: %.2f%%\n",i,b); 23 } 24 25 return 0; 26 } 27 28 void CreateGraph() 29 { 30 //用鄰接矩陣表示圖 31 int i,j; 32 int v1,v2; 33 scanf("%d %d",&Nv,&Ne); 34 for( i=0; i<=Nv; i++) 35 { 36 for( j=0; j<=Nv; j++) 37 { 38 G[i][j] = 0; //初始化 39 } 40 } 41 for( i=0; i<Ne; i++) //注意這里是讀入邊 42 { 43 scanf("%d %d",&v1,&v2); 44 G[v1][v2] = 1; 45 G[v2][v1]= G[v1][v2]; //無向圖對稱 46 } 47 } 48 49 int BFSTraverse( int i) 50 { 51 int q[MAXVEX]= {0}; //用數組表示隊列 52 int rear=-1,front=-1; 53 int j; 54 int temp; 55 int cnt ; 56 57 int level; //當前結點所在的層數 58 int last; //該層的最后一個結點 59 int tail; //最后一個進入隊列的結點 60 61 for( j=0; j<=Nv; j++) 62 { 63 visited[j] = 0; 64 } 65 66 visited[i] =1; 67 cnt = 1; 68 level = 0; //本結點不算在層數里 69 last = i; 70 q[++rear] = i; //入隊 71 while( front<rear ) //判斷隊列是否為空 72 { 73 temp =q[++front]; //出隊 74 75 for( j=1; j<=Nv; j++) 76 { 77 if( G[temp][j] && !visited[j]) 78 { 79 visited[j] = 1; 80 q[++rear] = j; 81 cnt ++; 82 tail = j; 83 } 84 } 85 if( temp==last) 86 { 87 level ++; 88 last = tail; 89 } 90 if( level==6 ) 91 { 92 break; 93 } 94 } 95 96 97 return cnt; 98 }
?
?
轉載于:https://www.cnblogs.com/yuxiaoba/p/8337063.html
總結
以上是生活随笔為你收集整理的7-7 六度空间(30 分)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国际站 RDS MySQL 5.7 高可
- 下一篇: 学习算法你必须知道的一些基础知识(文末福