BFS
key:记录BFS的层数,在BFS层数为6的时候计算count/Nv
ac代码
#include<stdio.h>
#include<iostream>
#include<queue>
using namespace std;
int G[10005][10005];
bool Visited[10005];
int Nv,Ne;
void CreateGraph()
{
scanf("%d %d",&Nv,&Ne);
for(int i=0;i<Nv;i++)
{
Visited[i] = false;
for(int j=0;j<Nv;j++)
{
G[i][j] = 0;
}
}
for(int i=0;i<Ne;i++)
{
int x,y;
scanf("%d %d",&x,&y);
G[x-1][y-1] = G[y-1][x-1] = 1;
}
}
void BFS(int n)
{
int level = 0,last = n,rail;
queue<int> Q;
Q.push(n);
Visited[n] = true;
int count = 1;
while(!Q.empty()){
int temp = Q.front();
Q.pop();
for(int i=0;i<Nv;i++)
{
if(!Visited[i]&&G[temp][i]){
Q.push(i);
Visited[i] = true;
count++;
rail = i;
}
}
if(temp == last){
level++;
last = rail;
}
if(level == 6){
break;
}
}
printf("%d: %.2f%%\n", n+1, (count * 100.00) / Nv);
}
int main()
{
CreateGraph();
for(int i=0;i<Nv;i++)
{
for(int j=0;j<Nv;j++)
{
Visited[j] = false;
}
BFS(i);
}
return 0;
}