基本思想:
层序遍历问题;
关键点:
无;
#include<iostream> #include<stdlib.h> #include<stdio.h> #include<vector> #include<string> #include<math.h> #include<algorithm> #include<cstring> #include<map> #include<queue> using namespace std; int n, m; int cnt=0; int f_layer=0; struct node { vector<int>child; int layer; }; vector<node>tree; void layer_init() { if (tree.size() == 0) return; tree[1].layer = 1; queue<int>q; q.push(1); while (!q.empty()){ int index = q.front(); q.pop(); for (int i = 0; i < tree[index].child.size(); i++) { tree[tree[index].child[i]].layer = tree[index].layer + 1; q.push(tree[index].child[i]); } } } void layer_find() { if (tree.size() == 0) return; queue<int>q; q.push(1); int l = 0; int c = 0; while (!q.empty()) { l++; c = q.size(); for (int i = 0; i < c; i++) { int index = q.front(); q.pop(); for (int j = 0; j < tree[index].child.size(); j++) { q.push(tree[index].child[j]); } } if (cnt < c) { cnt = c; f_layer = l; } } } int main() { cin >> n >> m; int a, b,c; tree.resize(n+1); for (int i = 0; i < m; i++) { cin >> a >> b; for (int j = 0; j < b; j++) { cin >> c; tree[a].child.push_back(c); } } layer_find(); cout << cnt << " " << f_layer; return 0; }
原文地址:https://www.cnblogs.com/songlinxuan/p/12307251.html
时间: 2024-10-30 08:58:36