思路:
找出节点个数最多的一层
层序遍历、DFS
通过代码:
不用queue用vector实现DFS
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
const int N = 110;
int n, m;
bool g[N][N]; //邻接矩阵存储
vector<int> level[N]; //每层存到一个vector里,最多有N层
int main()
{
cin >> n >> m; //节点总数,非叶子结点数
while (m -- )
{
int id, k;
cin >> id >> k; //非叶子结点编号,子节点数
while (k -- )
{
int son;
cin >> son;
g[id][son] = true;
}
}
level[1].push_back(1); //第一层只有一个根节点
int l = 1;
while (level[l].size()) //如果当前层有元素
{
for (auto ver : level[l]) //遍历当前层的每一个点,把他的儿子加到下一层
for (int j = 1; j <= n; j ++ )
if (g[ver][j])
level[l + 1].push_back(j);
l ++ ;
}
int k = 1; //寻找节点数最多的那一层
for(int i = 1; i < l; i ++ )
if (level[i].size() > level[k].size())
k = i;
cout << level[k].size() << ' ' << k << endl; //输出数量和层级
return 0;
}