思路:
对每个顶点使用BFS的方法记录当前原点到其他点的距离
代码:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
#define INF 1e9
#define MAXN 1005
int G[MAXN][MAXN]={0};
int vis[MAXN]={0};
int dist[MAXN];
int BFS(int v,int n){
int k=0;
for(int i=1;i<=n;i++){
dist[i]=INF;
}
dist[v]=0;
int queue[MAXN],front=0,rear=-1;
vis[v]=1;
queue[++rear]=v;
while(front<=rear){
v=queue[front++];
for(int i=1;i<=n;i++){
if(vis[i]==0&&G[v][i]==1){
vis[i]=1;
dist[i]=dist[v]+1;
queue[++rear]=i;
}
}
}
for(int i=1;i<=n;i++){
if(dist[i]<=6){
k++;
}
}
return k;
}
int main(){
int n,m,a,b;
cin>>n>>m;
while(m--){
cin>>a>>b;
G[a][b]=G[b][a]=1;
}
for(int i=1;i<=n;i++){
int k=BFS(i,n);
printf("%d: %.2f%%\n",i,k*100.0/n);
memset(vis,0,sizeof(vis));
}
return 0;
}