六度空间--MOOC浙大数据结构 MOOC浙大数据结构 — 06-图3 六度空间 (30分)

#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更改过了,输出的格式问题,这个以后也得小心

MOOC浙大数据结构 — 06-图3 六度空间 (30分)



猜你喜欢

转载自blog.csdn.net/m0_37561165/article/details/80930071