1. 程式人生 > >中國大學MOOC-陳越、何欽銘-資料結構-2018秋——六度空間

中國大學MOOC-陳越、何欽銘-資料結構-2018秋——六度空間

我的中國大學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++解題報告: