Responsive image

问题 C: 第3关:六度空间理论

问题 C: 第3关:六度空间理论

时间限制: 1 Sec  内存限制: 128 MB
提交: 0  解决: 19
[提交][状态][讨论版][命题人:]

题目描述

“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”假如给你一个社交网络图,请你对每个节点计算符合“六度空间”理论的结点占结点总数的百分比。
#include <iostream>
#include <iomanip>
#define MAXSIZE 100
#define INFINITE 36577
using namespace std;
void CreateUDG(int G[][MAXSIZE], int m, int n) 
{//使用连接短速度阵列的方法创建
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
G[i][j]=INFINITE; //原始区域中各个时间段的授权值太长,是否将设备存储在行中的单个点
int a, b;
for (int i=0;i<m;i++) { //存储位置被视为封闭组件。存储位置的测试值为负1,存储位置被看作封闭组件
cin>>a>>b;
G[a-1][b-1]=1;
G[b-1][a-1]=1;
}
}

int FindMinPath(bool S[], int D[], int n) 
{//选择其中一个条件的当前最短期限,终点为n
int min=INFINITE;
int index=-1;
for (int i=0;i<n;i++) {
if (!S[i]&&D[i]<min) {
min=D[i];
index=i;
}
}
return index;
}

float SixDegree_DIJ(int G[][MAXSIZE], int n, int start) 
{//通过这个“新的开始”,我们可以计算法律系统中六个空时间点的数量,而开始是交换机指定时间点的第一级
/**************begin************/









    /**************end************/
}

int main() 
{
int n,m;
while (true) {
cin>>n>>m;
if (n==0&&m==0) break;
int G[MAXSIZE][MAXSIZE]={ 0 };
CreateUDG(G,m,n);
for (int i=0;i<n;i++) { //首次验证n年的中央时间管理后
cout<<i+1<<": "<<fixed<<setprecision(2)<<SixDegree_DIJ(G,n,i)*100<<"%"<<endl;
}
}
return 0;
}

输入描述

多组数据,每组数据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%

提示


组合提交代码,你需要提交



float SixDegree_DIJ(int G[][MAXSIZE], int n, int start) 

{//通过这个“新的开始”,我们可以计算法律系统中六个空时间点的数量,而开始是交换机指定时间点的第一级

/**************begin************/



















    /**************end************/

}





[提交][状态]
ACM算法攻关部