PAT甲级1094 The Largest Generation:[C++题解]邻接表存树、每层节点数量、vector模拟bfs层序遍历、bfs另类实现
生活随笔
收集整理的這篇文章主要介紹了
PAT甲级1094 The Largest Generation:[C++题解]邻接表存树、每层节点数量、vector模拟bfs层序遍历、bfs另类实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 題目分析
- 題目鏈接
題目分析
來源:PAT網站
題意重述:求一棵樹中結點數量最多的層數,并輸出最大的數量。
分析:使用鄰接矩陣存儲樹,bool型變量g[N][N] 鄰接矩陣,如果有邊 置為true,沒有邊是false。
然后就是 廣度優先搜索bfs,這里就是統計每層的數量 。
直接使用vector來模擬就行。處理第1層的時候,第1層結點的孩子就是第2層。 第l層的孩子就是第l+1層的結點數。
level[1].push_back(1); //第一層是根結點int l =1; //層數從1開始//如果當前這層是有元素的while(level[l].size()){//把這一層的兒子加到下一層for( auto ver:level[l]){ //對于這一層的任意結點verfor(int j =1; j <= n;j++) //看ver的兒子有多少,都壓入下一層的vector中if(g[ver][j]) //以ver為根,j為兒子,如果存在邊level[l+1].push_back(j);}l ++; //層數加1}AC代碼
#include<bits/stdc++.h> using namespace std; const int N = 110;int n , m; bool g[N][N]; //鄰接矩陣 vector<int> level[N];int main(){cin >> n >> m;while(m--){int id , k;cin>> id >> k;while(k --){int son;cin>> son;g[id][son] =true; //代表id到son有一條邊}}level[1].push_back(1); //第一層是根結點int l =1; //層數從1開始//如果當前這層是有元素的while(level[l].size()){//把這一層的兒子加到下一層for( auto ver:level[l]){for(int j =1; j <= n;j++)if(g[ver][j])level[l+1].push_back(j);}l ++;}int depth =1 ;for(int i =1; i<= l ;i++){if(level[i].size()>level[depth].size())depth =i;}cout<<level[depth].size()<<" "<<depth; }題目鏈接
PAT甲級1094 The Largest Generation
acwing1584. 最大的一代
總結
以上是生活随笔為你收集整理的PAT甲级1094 The Largest Generation:[C++题解]邻接表存树、每层节点数量、vector模拟bfs层序遍历、bfs另类实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PAT甲级1053 Path of Eq
- 下一篇: PAT甲级1003 Emergency: