树节点孩子数 XJOI

树节点孩子数

http://115.236.49.52:83/problem/9522

题目描述:

已知一棵树,有n个结点,编号1至N,其中1号是根。求树的宽度

输入格式:

第一行一个数N(1<=N<=1000)

接下来N行每行N个1或0,第i第j列是1,表示i,j两点有边,否是没有边

输出格式:

树节点孩子数

样例输入:

10
0110000000
1001000000
1000110001
0100000000
0010000000
0010001000
0000010110
0000001000
0000001000
0010000000

样列输出:

2 1 3 0 0 1 2 0 0 0

题意

给一棵树,求所有节点的孩子数

CODE

#include <cstdio>
#include <iostream>
using namespace std;

int n, tot;
string s[1010];
bool a[1010][1010], b[1010];
int ans[1010];

void dfs(int k, int deep){
    if(b[k]){
        return ;
    }
    b[k] = true;
    for(int i = 1; i <= n; i++){
        if(a[i][k] && !b[i]){
            ans[k]++;
            dfs(i, deep+1);
        }
    }
    return ;
}

int main(){
    scanf("%d", &n);
    for(int i = 1; i <= n; i++){
        cin >> s[i];
    }
    for(int i = 1; i <= n; i++){//存
        for(int j = 1; j <= n; j++){
            if(s[i][j-1] == '1'){
                a[i][j] = a[j][i] = 1;
            }
        }
    }
    dfs(1, 1);
    for(int i = 1; i <= n; i++){
        printf("%d ", ans[i]);
    }
    printf("\n");
    return 0;
}
posted @ 2020-06-06 20:20  LT-Y  阅读(554)  评论(0)    收藏  举报