4004.六度空間理論
阿新 • • 發佈:2018-12-04
六度空間理論
釋出時間: 2018年11月26日 10:17 時間限制: 1000ms 記憶體限制: 128M
核心思想是使用BFS對鄰接表掃描6層計數。
“六度空間”理論又稱作“六度分隔(Six Degrees of Separation)”理論。這個理論可以通俗地闡述為:“你和任何一個陌生人之間所間隔的人不會超過六個,也就是說,最多通過五個人你就能夠認識任何一個陌生人。”假如給你一個社交網路圖,請你對每個節點計算符合“六度空間”理論的結點佔結點總數的百分比。
多組資料,每組資料m+1行。第一行有兩個數字n和m,代表有n個人和m組朋友關係。n個人的編號為1到n。第二行到第m+1行每行包括兩個數字a和b,代表這兩個人互相認識。當n和m都等於0時,輸入結束。
每組資料輸出n行,對每個結點輸出與該結點距離不超過6的結點數佔結點總數的百分比,精確到小數點後2位。每個結節點輸出一行,格式為“結點編號:(空格)百分比%”。
10 9 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 8 1 2 2 3 3 4 4 5 5 6 6 7 7 8 9 10 0 0
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: 70.00% 2: 80.00% 3: 80.00% 4: 80.00% 5: 80.00% 6: 80.00% 7: 80.00% 8: 70.00% 9: 20.00% 10: 20.00%
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 #define maxn 100 5 6 typedef struct node 7 { 8 int data; 9 struct node *next; 10 } Node; 11 12 Node *V[maxn];//鄰接表 13 int visit[maxn]; 14 15 void BFS(int s, int n) 16 { 17 int count = 1; 18 Node *p;19 memset(visit, 0, sizeof(visit)); 20 int Queue[maxn]; 21 int front = 0, rear = 0, last = 0; 22 Queue[0] = s; 23 visit[s] = 1; 24 int six = 0; 25 while (front <= last) 26 { 27 p = V[Queue[front++]]->next; 28 while (p)//單層遍歷,一個人的所有朋友遍歷,Queue儲存其友 29 { 30 if (!visit[p->data]) 31 { 32 count++;//計數加一 33 visit[p->data] = 1;//改變訪問狀態 34 Queue[++rear] = p->data;//隊尾賦值 35 } 36 p = p->next; 37 } 38 if (front>last)//判斷此人的一度朋友是否遍歷,如果遍歷結束,進入其二度朋友 39 { 40 last = rear; 41 six++; 42 if (six == 6) 43 break; 44 } 45 } 46 printf("%d: %.2f%%\n", s, count*100.0 / n); 47 } 48 49 int main() 50 { 51 int n, m; 52 int x, y; 53 Node *p; 54 while (1) 55 { 56 cin >> n >> m; 57 if (!n&&!m)break; 58 for (int i = 1; i <= n; i++) 59 { 60 V[i] =new Node; 61 V[i]->data = i; 62 V[i]->next = NULL; 63 }//set up 鄰接表 index 64 while (m--) 65 { 66 cin>>x>>y; 67 p = new Node; 68 p->data = y; 69 p->next = V[x]->next; 70 V[x]->next = p;//y follow V[x] 71 p = new Node; 72 p->data = x; 73 p->next = V[y]->next; 74 V[y]->next = p;//x follow V[y] 75 } 76 for (int i = 1; i <= n; i++) 77 BFS(i, n); 78 } 79 return 0; 80 }