深搜的大致流程:
void dfs(int index,int depth){
if(递归结束条件){
符合结束条件时要进行的操作;
return;
}
```for(int i=0;i<此结点可拓展的状态;i++){
if(某个条件)
某个操作;
dfs(f(index),depth+1);
}
}
实现
#include<bits/stdc++.h>
using namespace std;
int maxdepth=-1;
int nochild[100]={0};
vector<int>tree[100];//baocun tree's children
void dfs(int index,int depth){
if(tree[index].size()==0){
nochild[depth]++;
maxdepth=max(maxdepth,depth);
return;
}
for(int i=0;i<tree[index].size();i++){
dfs(tree[index][i],depth+1);
}
}
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<m;i++){
int temp,cnt;
cin>>temp>>cnt;
for(int j=0;j<cnt;j++){//temp节点的子节点收集
int c;
cin>>c;
tree[temp].push_back(c);
}
}
dfs(1,0);
printf("%d",nochild[0]);
for(int i=1;i<=maxdepth;i++){
printf(" %d",nochild[i]);
}
return 0;
}
大佬柳婼:https://blog.csdn.net/liuchuo。