PAT 1004

BFS

#include <bits/stdc++.h>
using namespace std;
const int maxn = 110;

vector<int> tree[maxn];
int level[maxn];

int main()
{
    int n, m;
    scanf("%d%d", &n, &m);
    memset(level, 0, sizeof(level));
    for(int i = 0; i < n; i++) tree[i].clear();
    for(int i = 0; i < m; i++){
        int a, b, c;
        scanf("%d%d", &a, &b);
        for(int j = 0; j < b; j++){
            scanf("%d", &c);
            tree[a].push_back(c);
        }
    }
    queue<int> q;
    while(!q.empty()) q.pop();
    q.push(1);
    int cnt = 1, cmp = 0, last = 1, levelcnt = 0, res = 0;
    while(!q.empty()){
        //cout<<"-->"<<cmp<<" "<<last<<" "<<cnt<<" "<<levelcnt<<endl;
        int tmp = q.front(); q.pop();
        cmp++;
        if(tree[tmp].size() == 0) res++;
        for(int i = 0; i < tree[tmp].size(); i++){
            q.push(tree[tmp][i]);
            cnt++;
        }
        if(last == cmp){
            level[levelcnt++] = res;
            res = 0;
            last = cnt;
        }
    }
    if(n > 1) printf("0");
    else printf("1");
    for(int i = 1; i < levelcnt; i++){
        printf(" %d", level[i]);
    }
    return 0;
}

DFS

#include <bits/stdc++.h>
using namespace std;
const int maxn = 110;

vector<int> tree[maxn];
int level[maxn];
int vis[maxn];
int mx = -1;

void dfs(int root, int depth){
    vis[root] = 1;
    if(tree[root].size() == 0){
        level[depth]++;
        mx = max(mx, depth);
        return;
    }
    for(int i = 0; i < tree[root].size(); i++){
        if(!vis[tree[root][i]])dfs(tree[root][i], depth+1);
    }
}

int main()
{
    int n, m;
    scanf("%d%d", &n, &m);
    memset(level, 0, sizeof(level));
    memset(vis, 0, sizeof(vis));
    for(int i = 0; i < n; i++) tree[i].clear();
    for(int i = 0; i < m; i++){
        int a, b, c;
        scanf("%d%d", &a, &b);
        for(int j = 0; j < b; j++){
            scanf("%d", &c);
            tree[a].push_back(c);
        }
    }
    dfs(1, 0);
    if(n > 1) printf("0");
    else printf("1");
    for(int i = 1; i <= mx; i++){
        printf(" %d", level[i]);
    }
    return 0;
}

8 3
1 3 2 3 4
2 3 5 6 7
4 1 8

-->0 1 4
posted @ 2019-02-22 11:19  sourcry  阅读(104)  评论(0)    收藏  举报