大致题意就是给出一棵树,求出哪一层结点的个数最多,输出个数 和第几层。
这题挺简单的,就是写代码的时候比较粗心,导致调试了好久。。。
我用的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 }
原文:https://www.cnblogs.com/keep23456/p/12397608.html