1004 Counting Leaves (30)(30 分)

DFS:因为要知道有多少层,每次进DFS先更新一下最大层数

#include
#include
#include
using namespace std;
const int maxn = 110;
vectornode[maxn];
int n, m;
int Layer[maxn];
int maxlayer = 0;
void DFS(int index, int layer)
{
    maxlayer = max(maxlayer, layer);
    if (node[index].size() == 0)
    {
        Layer[layer]++;
        return;
    }
    for (int i = 0; i < node[index].size(); i++)
    {
        DFS(node[index][i], layer + 1);
    }
}
int main()
{
    scanf("%d%d", &n, &m);
    for (int i = 0; i < m; i++)
    {
        int id, k;
        scanf("%d%d", &id, &k);
        while (k--)
        {
            int x;
            scanf("%d", &x);
            node[id].push_back(x);
        }
    }
    DFS(1,1);
    for (int i = 1; i <= maxlayer; i++)
    {
        printf("%d", Layer[i]);
        if (i != maxlayer)printf(" ");
    }
    return 0;
}

BFS:注意maxlayer更新的位置,bfs都在q.pop()之后操作,不要在循环里操作

#include
#include
#include
#include
using namespace std;
const int maxn = 110;
struct node {
    int layer;
    vectorchild;
}Node[maxn];
int Layer[maxn];
int n, m;
int maxlayer = 0;
void BFS(int root)
{
    queueq;
    Node[root].layer = 1;
    q.push(root);
    while (!q.empty())
    {
        int top = q.front();
        q.pop();
        maxlayer = max(maxlayer, Node[top].layer);
        if (Node[top].child.size())
        {
            for (int i = 0; i < Node[top].child.size(); i++)
            {
                int child = Node[top].child[i];
                Node[child].layer = Node[top].layer + 1;
                q.push(child);
            }
        }
        else Layer[Node[top].layer]++;
    }
}
int main()
{
    scanf("%d%d", &n, &m);
    for (int i = 0; i < m; i++)
    {
        int id, k;
        scanf("%d%d", &id, &k);
        while (k--)
        {
            int x;
            scanf("%d", &x);
            Node[id].child.push_back(x);
        }
    }
    BFS(1);
    for (int i = 1; i <= maxlayer; i++)
    {
        printf("%d", Layer[i]);
        if (i != maxlayer)printf(" ");
    }
    return 0;
}

你可能感兴趣的:(1004 Counting Leaves (30)(30 分))