题目:

思路分析:
就是一个深度搜索的题目 拿邻接表来存树
代码实现:
const int MAX=100010;
vector<int>v[MAX];
vector<int>vv;
int ans;
void dfs(int pos,int d){
if(d>ans){
ans=d;
vv.clear();
}
if(d==ans){
vv.push_back(pos);
}
for(int i=0;i<v[pos].size();i++){
dfs(v[pos][i],d+1);
}
}
int main(){
int n;
cin>>n;
int f;
for(int i=1;i<=n;i++){
int x;
cin>>x;
if(x==-1) f=i;
else v[x].push_back(i);
}
dfs(f,1);
cout<<ans<<endl;
for(int i=0;i<vv.size()-1;i++){
cout<<vv[i]<<" ";
}
cout<<vv[vv.size()-1];
}
本文介绍了一个使用深度优先搜索(DFS)解决树形结构中最远节点问题的算法实现。通过邻接表存储树结构,并利用递归进行深度遍历,找到距离根节点最远的节点及路径。
1147

被折叠的 条评论
为什么被折叠?



