#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
//bfs
const int maxN =110;
vector<int> Node[maxN];
int nodeLevel[maxN]={0};
int number[maxN]={0};
//记录每个节点的层数
void BFS(int root){
queue<int> q;
q.push(root);
nodeLevel[root] = 1;
while (!q.empty()){
int now = q.front();
q.pop();
number[nodeLevel[now]]++;
for(int i=0;i<Node[now].size();i++){
q.push(Node[now][i]);
nodeLevel[Node[now][i]]=nodeLevel[now]+1;
}
}
}
int main() {
int N,M;
cin>>N>>M;
for(int i =0;i<M;i++){
int number,sum;
cin>>number;
cin>>sum;
for(int j= 0;j<sum;j++){
int child;
cin>>child;
Node[number].push_back(child);
}
}
BFS(1);
int maxNum =-1;
int maxLevel =-1;
for(int i = 0;i<maxN;i++){
if(number[i]>maxNum){
maxNum = number[i];
maxLevel = i;
}
}
cout<<maxNum<<" "<<maxLevel;
return 0;
}
网上答案大同小异 都是DFS 本题给出BFS解法:
开辟两个数组number[i] 记录i层结点个数
nodelevel[ Node Number] 记录这个node的所在层数。
每次pushback子元素时候,他们的层数都要是 父节点的层数+1
每次弹出pop 时,该结点所在层数的数字+1 即number[nodeLevel[now]]++