六度空间理论
#include <iostream>
#include <iomanip>
#include <climits>
#include <cstring>
using namespace std;
const int maxV = 100;
#define INF INT_MAX/2
typedef struct {
int vex[maxV];
int matrix[maxV][maxV];
int vecNum,arcNum;
}MGraph;
void InitGraph(MGraph &G){
G.vecNum = 0;
G.arcNum = 0;
}
void CreateGraph(MGraph &G,int n,int m){
InitGraph(G);
for(int i = 1;i<=n;i++){
for(int j = 1;j<=n;j++){
G.matrix[i][j] = INF;
}
}
for(int i = 1;i<=n;i++){ //构造顶点
G.vex[i] = i;
G.vecNum++;
}
for(int i = 1;i<=m;i++){ //构造边
int v,d;
cin>>v>>d;
G.matrix[v][d] = 1;
G.matrix[d][v] = 1;
G.arcNum++;
}
}
//这题蛮好的,爆搜
void dfs(MGraph G,int i,int* path,int deep){
if(deep == 6) return ;
for(int j = 1;j<=G.vecNum;j++){
if(path[j] == 0 && G.matrix[i][j] == 1){
path[j] = 1;
dfs(G,j,path,deep+1);
}
}
}
void Six_Degrees(MGraph G){
for(int i = 1;i<=G.vecNum;i++){
int path[30] = {0};
path[i] = 1;
dfs(G,i,path,0);
//处理path
int num = 0;
for(int j = 1;j<=G.vecNum;j++){
if(path[j] == 1) num++;
}
cout<<i<<":"<<" ";
cout<<fixed<<setprecision(2)<<((double)num /G.vecNum)*100<<"%"<<endl;
}
}
int main(){
int n,m;
while(cin>>n>>m && (n!=0 && m!=0)){
MGraph G;
CreateGraph(G,n,m);
Six_Degrees(G);
}
return 0;
}