中國大學MOOC-陳越、何欽銘-數據結構-2018秋 06-圖3 六度空間 (30 分)

#include <bits/stdc++.h>

using namespace std;

int const MAXV = 10000;
int vertex, edge;
int visited[MAXV] = {0};
int graph[MAXV][MAXV];
int BFS(int vertex);

int main()
{
	#ifdef ONLINE_JUDGE
	#else
	freopen("in.txt", "r", stdin);
	#endif
	cin >> vertex >> edge;
	int a, b;
	for(int i = 0; i < edge; i++){
		cin >> a >> b;
		graph[a][b] = graph[b][a] = 1;
	}
	
	for(int i = 1; i <= vertex; i++){
		int cnt = BFS(i);
		memset(visited, 0, sizeof(visited));
		double f = 100.0 * cnt / vertex;
		printf("%d: %.02f%%\n", i, f);
	}
	
	return 0;
}

int BFS(int vertex)
{
	queue<int> q;
	int tmp, level = 0, tail, last = vertex, cnt = 1;
	q.push(vertex);
	visited[vertex] = 1;
	
	while(!q.empty()){
		tmp = q.front();
		
//		cout << "nVal: " << tmp << endl;
		
		q.pop();
		
		for(int i = 1; i <= ::vertex; i++){
			if(graph[tmp][i] && visited[i] == 0){
				cnt++;
				tail = i;
				visited[i] = 1;
				q.push(i);
			}
		}
		
		if(tmp == last){
			level++;
			last = tail;
		}
		
		if(level == 6) break; 
	}
	return cnt;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章