#include<iostream>
#include<queue>
#include<vector>
using namespace std;
int main()
{
int n,m;
vector<int> p[102];
cin>>n>>m;
int id,k,temp,cnt=0;
for(int i=0;i<m;i++){
cin>>id>>k;
for(int j=0;j<k;j++){
cin>>temp;
p[id].push_back(temp);
}
}
queue<int> st;
st.push(1); //把1压入队列
st.push(-1); //-1:标志位
while(!st.empty())
{
temp=st.front();
st.pop();
if(temp==-1){ //如果是-1,则意味着本层结束
cout<<cnt;
if(!st.empty()){
cnt=0;
st.push(-1);
cout<<" ";
}
}
else{ //不是-1,本层未结束
if(p[temp].size()==0) cnt++; //对无孩子节点进行计数
else
{
for(int i=0;i<p[temp].size();i++) //对有孩子节点的孩子压入队列
st.push(p[temp][i]);
}
}
}
return 0;
}
1004 Counting Leaves(模拟层次遍历的方法)
最新推荐文章于 2022-07-26 16:28:25 发布