树的高度:
题目:
PS G:\vscodetest> .\ab.exe
5 5
1 2
1 4
1 5
2 3
3
#include <stdio.h>
#include <vector>
#include <queue>
using namespace std;
int main() {
int n,m;
scanf("%d %d",&n,&m);
vector<vector<int>> tree(n + 1);
for (int i = 0; i < n - 1; i++)
{
int u,v;
scanf("%d %d",&u,&v);
tree[u].push_back(v);
tree[v].push_back(u);
}
queue<int> toVisit; //用来作BFS的队列
toVisit.push(m);
vector<int> distance(n + 1);
//用来判断某个结点是否访问过
//若访问过的话还可以记录根节点到该结点的距离
for (int i = 0; i < n; i++)
{
distance[i] = -1;
}
distance[m] = 0; //先设置根节点到根节点的距离是0
int maxdist = 0; //用于计数
while (toVisit.empty() == false)
{
int current = toVisit.front();
toVisit.pop();
for (int i = 0; i < tree[current].size(); i++)
{
int child = tree[current][i];
if (distance[child] != -1)
{
continue;
}
toVisit.push(child);
distance[child] = distance[current] + 1;
maxdist = distance[child];
}
}
printf("%d\n",maxdist);
return 0;
}