中国大学MOOC-陈越、何钦铭-数据结构-2018秋——六度空间

版权声明:我的GitHub:https://github.com/617076674。真诚求星! https://blog.csdn.net/qq_41231926/article/details/84674670

我的中国大学MOOC-陈越、何钦铭-数据结构-2018秋代码仓:https://github.com/617076674/MOOC-DataStructure-2018-Autumn

题目描述:

知识点:图的广度优先遍历

思路:图的广度优先遍历

当遍历层数超过6层时,停止遍历。

时间复杂度和图有关,不好分析。空间复杂度是O(N + M)。

C++代码:

#include<iostream>
#include<vector>
#include<queue>

using namespace std;

int N, M, count;
vector<int> graph[10001];
bool visited[10001];

void bfs(int nowVisit);
 
int main(){
	scanf("%d %d", &N, &M);
	int v1, v2;
	for(int i = 0; i < M; i++){
		scanf("%d %d", &v1, &v2);
		graph[v1].push_back(v2);
		graph[v2].push_back(v1);
	}
	for(int i = 1; i <= N; i++){
		count = 0;
		fill(visited + 1, visited + N + 1, false);
		bfs(i);
		printf("%d: %.2f%\n", i, count * 100.0 / N);
	}
	return 0;
}

void bfs(int nowVisit){
	queue<int> q;
	q.push(nowVisit);
	visited[nowVisit] = true;
	int level = 0;
	while(!q.empty()){
		int qSize = q.size();
		for(int i = 0; i < qSize; i++){
			int u = q.front();
			q.pop();
			for(int j = 0; j < graph[u].size(); j++){
				int v = graph[u][j];
				if(!visited[v]){
					q.push(v);
					visited[v] = true;
				}
			}
		}
		level++;
		count += qSize;
		if(level > 6){
			break;
		}
	}
}

C++解题报告:

猜你喜欢

转载自blog.csdn.net/qq_41231926/article/details/84674670