解题代码
#include<stdio.h>
#define MAXN 1000
#define MAXE (33*MAXN)
int A[MAXN+1][MAXN+1], B[MAXN+1], Q[MAXN+1];
int N, front = -1, rear = -1;
typedef enum { false, true } bool;
void Clear(void);
int BFS(int V);
bool IsEmpty(void);
void Enqueue(int V);
int Dequeue(void);
int main()
{
int E, i, x, y, counter;
scanf("%d %d", &N, &E);
for (i = 0; i < E; i++) {
scanf("%d %d", &x, &y);
A[x][y] = 1;
}
for (i = 1; i <= N; i++) {
counter = BFS(i);
printf("%d: %.2lf%%\n", i, (double)counter / N * 100);
Clear();
}
return 0;
}
void Clear(void) {
for (int i = 1; i <= N; i++) {
B[i] = 0;
Q[i] = 0;
front = rear = -1;
}
}
int BFS(int V) {
int last, tail, level, counter, i;
last = V; counter = 1; level = 0;
B[V] = 1;
Enqueue(V);
while (!IsEmpty()) {
V = Dequeue();
for (i = 1; i <= N; i++) {
if (!B[i] && (A[V][i] || A[i][V])) {
B[i] = 1;
Enqueue(i);
counter++;
tail = i;
}
}
if (V == last) {
last = tail;
level++;
}
if (level == 6) break;
}
return counter;
}
bool IsEmpty(void) {
if (front == rear) return true;
else return false;
}
void Enqueue(int V) {
Q[++rear] = V;
}
int Dequeue(void) {
return Q[++front];
}
测试结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a9b7256f4e2ec4e5c53c5badb8214f2e.png)
问题整理
1.基础题了。