#include <iostream>
#include <queue>
#include <cstring>
#include <iomanip>
#define MAX 10001
using namespace std;
int MatGra[MAX][MAX];
int visit[MAX] = { 0 };
//根据变量动态创建一维数组
int BFS(int node, int N){
queue<int> myqueue;
int count = 0;
visit[node] = 1;
myqueue.push(node);
count = 1;
int level = 0;//层数
int last = node;//入队的一层的最后一个
int tail = 0;//跳出一层的尾巴的标准,出队的记录
while (!myqueue.empty()){
int tmpnode = myqueue.front();
myqueue.pop();
for (int i = 1; i <= N; i++){//遍历整个矩阵
if (MatGra[tmpnode][i] == 1){//临界点W
if (!visit[i]){
visit[i] = 1;
myqueue.push(i);
count++;
tail = i;//记录尾巴
}
}
}
if (tmpnode == last){//遍历完一层了
level++;
last = tail;
}
if (level == 6)
break;
}
return count;
}
int main()
{
int N, M;//number of node;edges
cin >> N >> M;
for (int i = 1; i <= N; i++)
{
memset(MatGra[i], 0, sizeof(int)*N);
}
int a, b;//input tmp var
for (int i = 0; i<M; i++){
cin >> a >> b;
MatGra[a][b] = 1;
MatGra[b][a] = 1;
}
for (int i = 1; i <= N; i++){
memset(visit, 0, sizeof(int)*(N + 1));
int count = BFS(i, N);
double result = 100*(double)count / (double)N;
//printf("%d: %4.2f%%\n",i,result);
cout << i << ": " << fixed<<setprecision(2)<<result << "%" << endl;
}
return 0;
}
1.动态数组不好调试,真的不好调试
2.全局数组好用,每次遍历完一定要重新把visit数组清零
3.队列的基本操作:
C++ STL--queue 的使用方法
貌似编译出错,回家再改一下。
7.6更改过了,输出的格式问题,这个以后也得小心