PAT 1004.Counting Leaves (30)(C++)

Title descriptionInsert picture description here **Bold style**

This question is to output how many leaf nodes there are in each layer. It can be done in two ways: DFS and BFS. ( Because I don’t practice related questions for a long time. Such a simple question can’t be done quickly. )

This question is a basic search question, which requires a lot of practice and review

DFS

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

vector<vector<int>>tree(100);
int leaveNumOflLevel[100],maxlevel=-1;
int N,M;
void DFS(int v,int level){
    
    
	maxlevel=max(level,maxlevel);
	if(tree[v].empty()){
    
    
		leaveNumOflLevel[level]++;
	}
	for(int i:tree[v]){
    
    
		DFS(i,level+1);
	}
}
int main(){
    
    
	cin>>N>>M;
	while(M--){
    
    
		int id,k;
		cin>>id>>k;
		while(k--){
    
    
			int iid;
			cin>>iid;
			tree[id].push_back(iid);
		}
	}
	DFS(1,0);
	for(int i=0;i<=maxlevel;i++)
	{
    
    
		if(i==0)
		cout<<leaveNumOflLevel[i];
		else
		cout<<" "<<leaveNumOflLevel[i];
	}
	return 0;
}

BFS

#include<iostream>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;

vector<vector<int>>tree(100);
int leaveNumOflLevel[100],level[100],maxlevel=-1;
int N,M;
void BFS(){
    
    
	queue<int>q;
	q.push(1);
	while(!q.empty()){
    
    
		int v=q.front();
		q.pop();
		maxlevel=max(level[v],maxlevel);
	if(tree[v].empty()){
    
    
		leaveNumOflLevel[level[v]]++;
	}
	for(int i:tree[v]){
    
    
	level[i]=level[v]+1;
	q.push(i);
	}
	}
	
}
int main(){
    
    
	cin>>N>>M;
	while(M--){
    
    
		int id,k;
		cin>>id>>k;
		while(k--){
    
    
			int iid;
			cin>>iid;
			tree[id].push_back(iid);
		}
	}
	BFS();
	for(int i=0;i<=maxlevel;i++)
	{
    
    
		if(i==0)
		cout<<leaveNumOflLevel[i];
		else
		cout<<" "<<leaveNumOflLevel[i];
	}
	return 0;
}

Guess you like

Origin blog.csdn.net/qaqaqa666/article/details/112554144