7-9 六度空间 (30 分)
“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”
C++的临界表实现:
//临界表实现 7-9 六度空间 (30 分) BFS实现 C++
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;
int n, m;
vector<int> ch[10001]; //临界表
bool flag[10001]; //是否走过
int juli[10001]; //和i的距离
int BFS(int x)
{queue<int> cun;cun.push(x);int cou = 0;while (cun.size() > 0){int d = cun.front();cun.pop();if (juli[d] == 8)break;if (flag[d] == false){cou++;flag[d] = true;}for (int i = 0; i < ch[d].size(); i++){int data = ch[d][i];if (juli[data] == 0 || juli[data] > juli[d] + 1){juli[data] = juli[d] + 1;cun.push(data);} //更新距离}}return cou;
}
int main()
{int n, m;cin >> n >> m;for (int i = 0; i < m; i++){int a, b;cin >> a >> b;ch[a].push_back(b);ch[b].push_back(a);}for (int i = 1; i <= n; i++){fill(flag, flag + n + 1, false);fill(juli, juli + n + 1, 0); //初始化juli[i] = 1;int cou = BFS(i);double sum = cou * 100 / n;cout << i << ": " << fixed << setprecision(2) << sum << "%" << endl;}
}