题意:略。
思路:层序遍历;在结点中增加一个数据域表示结点所在的层次。
代码:
#include <cstdio> #include <queue> #include <vector> using namespace std; struct Node{ int layer; vector<int> child; }; vector<Node> tree(110); int level[110]={0}; int maxLevel=1,maxNum=0; void levelOrderTraversal(int root) { queue<Node> q; tree[root].layer=1; q.push(tree[root]); while(!q.empty()){ Node node=q.front(); q.pop(); level[node.layer]++; if(level[node.layer] > maxNum){ maxNum=level[node.layer]; maxLevel=node.layer; } for(auto it:node.child){ tree[it].layer=node.layer+1; q.push(tree[it]); } } } int main() { int n,m; scanf("%d%d",&n,&m); int id,k,kid; for(int i=0;i<m;i++){ scanf("%d%d",&id,&k); for(int j=0;j<k;j++){ scanf("%d",&kid); tree[id].child.push_back(kid); } } levelOrderTraversal(1); printf("%d %d\n",maxNum,maxLevel); return 0; }
原文地址:https://www.cnblogs.com/kkmjy/p/9604508.html
时间: 2024-10-11 14:28:43