#include<iostream>
#include<vector>
using namespace std;
int n,m;
//层号直接与hashmap对应
int book[102]={0};
vector<int>a[100];
void dfs(int index,int level)
{
book[level]++;
//叶节点那一层的大小本身为0所以直接是终止条件
for(int i=0;i<a[index].size();i++)
dfs(a[index][i],level+1);
}
int main()
{
cin>>n>>m;
for(int i=0;i<m;i++)
{ int k,p;
cin>>k>>p;
for(int j=0;j<p;j++)
{
int u;
cin>>u;
a[k].push_back(u);
}
}
//root level is defined to be 1. 看一下题目要求的范围
dfs(1,1);
//初始值最好赋值为符合条件的初始变量要么很大,要么初始(看情况)
int maxnum=1,maxlevel=1;
for(int i=1;i<102;i++)
if(book[i]>maxnum)
{
maxnum=book[i];
maxlevel=i;
}
//9 4
printf("%d %d",maxnum,maxlevel);
return 0;
}
终于程序代码一遍过~~~~~
总结:
1.使用了level标记,就没必要用bfs了,其实本质和bfs差不多
2.始值最好赋值为符合条件的初始变量要么很大,要么初始(看情况)
3.root level is defined to be 1. 看一下题目要求的范围 题目中要求根的层数为一
4.分段输入,一行数据可以只先取前几个分开
5.成员下表从1开始,先看清楚题目范围
英语:
<(▰ ̆◡ ̆▰)>
问题
如何用bfs实现本题