PAT1004 Counting Leaves(30)(BFS,DFS,樹(shù)的層序遍歷)

類型:樹(shù)的遍歷,dfs

題目:

A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child.

Input

Each input file contains one test case. Each case starts with a line containing 0 < N < 100, the number of nodes in a tree, and M (< N), the number of non-leaf nodes. Then M lines follow, each in the format:

ID K ID[1] ID[2] … ID[K]
where ID is a two-digit number representing a given non-leaf node, K is the number of its children, followed by a sequence of two-digit ID’s of its children. For the sake of simplicity, let us fix the root ID to be 01.

Output

For each test case, you are supposed to count those family members who have no child for every seniority level starting from the root. The numbers must be printed in a line, separated by a space, and there must be no extra space at the end of each line.

The sample case represents a tree with only 2 nodes, where 01 is the root and 02 is its only child. Hence on the root 01 level, there is 0 leaf node; and on the next level, there is 1 leaf node. Then we should output “0 1” in a line.

Sample Input

2 1
01 1 02

Sample Output

0 1

分析題目

可憐英語(yǔ)不好,題目都看不懂,先查一下一些單詞
family hierarchy家譜 pedigree tree譜系樹(shù)
For the sake of simplicity為了簡(jiǎn)單起見(jiàn)
seniority排行

好了單詞查完了,大概了解了題目意思,輸入端首先第一行給一個(gè)N表示樹(shù)的總節(jié)點(diǎn)個(gè)數(shù),第二個(gè)數(shù)M表示non-leaf node個(gè)數(shù),后面每一行就表示所有non-leaf的結(jié)構(gòu),最終輸出每一層葉子節(jié)點(diǎn)的個(gè)數(shù)

代碼

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> v[100];
int book[100];
int maxdepth = -1;
void dfs(int index, int depth)
{
    if(v[index].size() == 0)
    {
        maxdepth = max(depth, maxdepth);
        book[depth]++;
        return;
    }
    for(int i=0; i<v[index].size(); i++)
    {
        dfs(v[index][i], depth+1);
    }
}

int main()
{
    int N, M;
    cin >> N >> M;
    for(int i = 0; i<M; i++)
    {
        int index, childnum;
        cin >> index >> childnum;
        for(int j = 0; j<childnum; j++)
        {
            int child;
            cin >> child;
            v[index].push_back(child);
        }
    }
    dfs(1, 0);
    int k = 0;
    for(k=0; k<maxdepth; k++)
    {
        cout << book[k] << " ";
    }
    cout << book[k];
    return 0;
}

總結(jié)

其實(shí)是一道簡(jiǎn)單的dfs題目,復(fù)習(xí)了一下dfs的操作,參考了柳神的代碼

還可以~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,854評(píng)論 0 10
  • “我還是很喜歡你,像風(fēng)走了八千里,不問(wèn)歸期?!薄丛竭^(guò)的地方,都是遠(yuǎn)方。未曾看過(guò)的風(fēng)景,都是心之所往。 ...
    二丁目小姐閱讀 308評(píng)論 0 0
  • 一 我愛(ài)你 不是這一世 而是生生世世 二 我愛(ài)你 你愛(ài)不愛(ài)我呢? 如果你也愛(ài)我 那么 我們?cè)谝黄鸢?三 親愛(ài)的寶兒...
    夏言baby閱讀 215評(píng)論 2 0
  • 秋天是個(gè)溫暖又柔軟的季節(jié)。和春天不同,這種柔軟是干燥的,仿佛一卷工藝繁復(fù)的披肩,綿綿地蜷伏在掌心里。倘若經(jīng)了陽(yáng)光的...
    陶尊閱讀 606評(píng)論 0 1
  • Hello,everyone my name is Wangping,my english name is Sop...
    幸福萍寶閱讀 1,197評(píng)論 0 0

友情鏈接更多精彩內(nèi)容