zoukankan      html  css  js  c++  java
  • 树的遍历——A1094 The Largest Generation(25)(树的静态结构——> vector<int> Node[maxn]来表示)

    法1:BFS

    #include <bits/stdc++.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <queue>
    using namespace std;
    const int maxn = 100010;
    vector<int> temp[maxn];
    int n,m;
    int num,maxnum,level = 1,maxLevel = 1;
    queue<int> que;
    void BFS(){
        for(int i=0;i<temp[1].size();++i){
            que.push(temp[1][i]);
        }
        level++;
        num = que.size();
        maxnum = num;
        while(!que.empty()){
            for(int i = 0;i<num;++i){
                int digit = que.front();
                for(int j=0;j<temp[digit].size();++j){
                    que.push(temp[digit][j]);
                }
                que.pop();
            }
            num = que.size();
            level++;
            if(que.size() > maxnum){
                maxnum = que.size();
                maxLevel = level;
            }
        }
    }
    int main(){
        scanf("%d%d",&n,&m);
        for(int i=0;i<m;++i){
            int father,number,son;
            scanf("%d%d",&father,&number);
            for(int j=0;j<number;++j){
                scanf("%d",&son);
                temp[father].push_back(son);
            }
        }
        num = temp[1].size();
        BFS();
        printf("%d %d
    ",maxnum,maxLevel);
        system("pause");
        return 0;
    }

    法2:DFS遍历

    #include <bits/stdc++.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <queue>
    using namespace std;
    const int maxn = 110;
    vector<int>Node[maxn];
    int hashTable[maxn] = {0};//记录每个层的节点数
    void DFS(int index,int level){
        hashTable[level]++;
        for(int j = 0;j<Node[index].size();++j){
            DFS(Node[index][j],level+1);
        }
    }
    int main(){
        int n,m,parent,k,child;
        scanf("%d%d",&n,&m);
        for(int i =0;i<m;++i){
            scanf("%d%d",&parent,&k);
            for(int j =0;j<k;++j){
                scanf("%d",&child);
                Node[parent].push_back(child);
            }
        }
        DFS(1,1);
        int maxLevel = -1,maxValue = 0;
        for(int i=1;i<maxn;++i){
            if(hashTable[i]>maxValue){
                maxValue = hashTable[i];
                maxLevel = i;
            }
        }
        printf("%d %d
    ",maxValue,maxLevel);
        system("pause");
        return 0;
    }
  • 相关阅读:
    [转]scp用法
    进入docker登录psql数据库对特定表进行操作
    [整]swp文件的处理
    shift+zz保存并退出
    [转]python变量作用域的有趣差别
    git 删除分支操作
    混用参数命名方式,确保顺序在命名之前
    [译]Python面试中8个必考问题
    《浪潮之巅》与我的职业选择
    EBS 用户及其联系人的失效时间
  • 原文地址:https://www.cnblogs.com/JasonPeng1/p/12234883.html
Copyright © 2011-2022 走看看