1094 The Largest Generation

 大致题意就是给出一棵树,求出哪一层结点的个数最多,输出个数 和第几层。

这题挺简单的,就是写代码的时候比较粗心,导致调试了好久。。。

我用的BFS,总的来说,BFS要比DFS多30行代码,但是BFS更容易理解。

BFS代码:

 1 #include<iostream>
 2 #include<vector>
 3 #include<queue>
 4 #include<map>
 5 #include<algorithm>
 6 using namespace std;
 7 const int maxn = 200;
 8 
 9 struct Node {
10     int layer;
11     vector<int> child;
12 } node[maxn];
13 int MAX = -1;
14 map<int,int> mp;
15 void BFS(int root) {
16     //第一步,定义队列并入队
17     queue<int> que;
18     node[root].layer = 1;
19     que.push(1);
20     //第二步,判断队是否为空
21     while(!que.empty()) {
22         //第三步,访问队首元素并出队
23         int now = que.front();
24         mp[node[now].layer]++;
25         MAX = max(MAX,mp[node[now].layer]);
26         que.pop();
27         //第四步,下一层元素入队
28         for(int i = 0; i < node[now].child.size(); ++i) {
29             node[node[now].child[i]].layer = node[now].layer+1;
30             que.push(node[now].child[i]);
31         }
32     }
33 }
34 
35 int main() {
36     int n,m,father,k,child;
37     cin>>n>>m;
38     for(int i = 0; i < m; ++i)    {
39         cin>>father>>k;
40         for(int j = 0; j < k; ++j) {
41             cin>>child;
42             node[father].child.push_back(child);
43         }
44     }
45     BFS(1);
46     for(auto it = mp.begin(); it!= mp.end(); ++it) {
47         if(it->second == MAX) {
48             printf("%d %d",MAX,it->first);
49             break;
50         }
51     }
52     return 0;
53 }

DFS代码:

 1 #include<iostream>
 2 #include<vector>
 3 #include<map>
 4 using namespace std;
 5 const int maxn = 200;
 6 vector<int> child[maxn];
 7 map<int,int> mp;
 8 void DFS(int root,int level) {
 9     mp[level]++;
10     for(int i = 0; i < child[root].size(); ++i)
11         DFS(child[root][i],level+1);
12 }
13 
14 int main() {
15     int n,m,father,k,Child;
16     cin>>n>>m;
17     for(int i = 0; i < m; ++i)    {
18         cin>>father>>k;
19         for(int j = 0; j < k; ++j) {
20             cin>>Child;
21             child[father].push_back(Child);
22         }
23     }
24     DFS(1,1);
25     int MAX = 0,level = 1;
26     for(auto it = mp.begin(); it!= mp.end(); ++it) {
27         if(MAX < it->second) {
28             MAX = it->second;
29             level = it->first;
30         }
31     }
32     printf("%d %d",MAX,level);
33     return 0;
34 }

 

posted @ 2020-03-02 19:36  tangq123  阅读(128)  评论(0编辑  收藏  举报