版权声明:我的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++解题报告: