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

浙公网安备 33010602011771号