中國大學MOOC-陳越、何欽銘-資料結構-2018秋——六度空間
阿新 • • 發佈:2018-12-05
我的中國大學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++解題報告: