1094. The Largest Generation (25)
来源:互联网 发布:苹果手机频谱软件 编辑:程序博客网 时间:2024/06/08 16:58
/*法一:孩子节点用动态数组,队列中存的是完整的节点信息而非一个节点的序号,用数组存层数和该层孩子数。*/#include<iostream>#include<queue>#include<vector>//#pragma warning(disable:4996)using namespace std;#define MAX 101 //常量的定义/*序号,层数,孩子个数,孩子数组,其中序号可用node数组下标来表示*/struct node{ int level; vector<int> child;//动态数组存孩子};int main(){ //freopen("input.txt","r",stdin); node tree[MAX]; int N,M; cin>>N>>M; for(int i=0;i<M;i++){ int index,k; cin>>index>>k; for(int j=0;j<k;j++){ int childId; cin>>childId; tree[index].child.push_back(childId); } } queue<node> q; int root=1; tree[root].level=1; q.push(tree[root]);//01号整个节点插入 int maxLevel=1,maxCount=0; int countLevel[MAX]={101};//下标表示层数,下标对应的数组元素表示该层节点数, while(!q.empty()){ //BFS广度优先用队列 node curNode=q.front(); q.pop(); countLevel[curNode.level]++; if(countLevel[curNode.level]>maxCount){ maxCount=countLevel[curNode.level]; maxLevel=curNode.level; } for(int i=0;i<curNode.child.size();i++){ tree[curNode.child[i]].level=curNode.level+1; q.push(tree[curNode.child[i]]); } } cout<<maxCount<<" "<<maxLevel<<endl; return 0;}> http://blog.csdn.net/flx413/article/details/52641124
/*法2:比法一low一些*/#include<iostream>#include<queue>//#pragma warning(disable:4996)using namespace std;#define MAX 101 //常量的定义/*序号,层数,孩子个数,孩子数组,其中序号可用node数组下标来表示*/struct node{ int level; int k; int child[MAX];};int main(){ //freopen("input.txt","r",stdin); node tree[MAX]; int N,M;cin>>N>>M; for(int i=1;i<=N;i++){ //下标从1开始,下标为节点序号 tree[i].level=1; tree[i].k=0; } for(int i=0;i<M;i++){ int index;cin>>index;cin>>tree[index].k; for(int j=0;j<tree[index].k;j++){ cin>>tree[index].child[j]; } }/*在纸上画一棵树,有5个结点.根是1,他的左孩子是3,右孩子是5,3的孩子是2,2的孩子是4按照下面这个执行过程,就刚才箭头指的那个位置开始,1号结点是根结点,层是1他有两个孩子分别是3和5,那么3和5的level是2,然后开始访问2号结点了,2的孩子是4,但是此时2这个结点level还是1(初始化),这个是错误的. for(int i=1;i<=N;i++){ for(int j=0;j<tree[i].k;j++){ tree[tree[i].child[j]].level=tree[i].level+1; } }*/ queue<node> q; int root=1; tree[root].level=1; q.push(tree[root]);//01插入 int lev=1,cnt=0; //lev某层,cnt某层的叶子节点数 int maxlev=1,maxcnt=0; while(!q.empty()){ //BFS广度优先用队列 node curNode=q.front();q.pop(); int curlev=curNode.level; if(curlev!=lev){ if(cnt>maxcnt){ maxcnt=cnt; maxlev=lev; } cnt=0; lev=curlev; } cnt++; for(int i=0;i<curNode.k;i++){ tree[curNode.child[i]].level=curNode.level+1; q.push(tree[curNode.child[i]]); } } if(cnt>maxcnt){//考虑到如果最后一层是最多节点的情况 maxcnt=cnt; maxlev=lev; } cout<<maxcnt<<" "<<maxlev<<endl; return 0;}
0 0
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 使用LVS 实现负载均衡的原理。
- ViewStub源码研究
- LeetCode -- Arranging Coins
- 输入一个链表,从尾到头打印链表每个节点的值。
- 常见前端面试题及答案(上)
- 1094. The Largest Generation (25)
- LeetCode -- First Unique Character in a String
- IPython Notebook使用实例
- 谷歌学术辅助科研
- servelt2/3 config
- systemverilog中logic变量的使用
- 关于Java编码问题
- 面试题42-题目2:字符串左旋转
- 深入解读Spring Framework Web MVC(第五弹:@RequestMapping中的头字段值)