日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

PAT甲级1094 The Largest Generation:[C++题解]邻接表存树、每层节点数量、vector模拟bfs层序遍历、bfs另类实现

發布時間:2025/4/5 c/c++ 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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另类实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。