个人觉得,bsf更像是dfs的改进版,嗯,也许是我理解的太浅显了。
对于这个题,首先想的是递归,然后发现没有结束条件,emm,然后明白了 是这种情况还要记录步骤的话 最好的办法就是bfs了 广度优先搜,所有的方向都去,然后记录,然后再深入。代码如下(liuchuo大佬的)
#include <bits/stdc++.h>
using namespace std;
struct node {
int id,level;
};
int main(){
int n,temp,maxlevel=-1;
cin>>n;
queue<node>q;
vector<vector<int>> v(n+1);
vector<node> ans;
for(int i=1;i<=n;i++){
cin>>temp;
if(temp==-1)temp=0;
v[temp].push_back(i);
}
q.push({0,0});
while(!q.empty()){
node qq=q.front();
int id=qq.id,level=qq.level;
if(qq.level>maxlevel)maxlevel=qq.level;
ans.push_back(qq);
q.pop();
for(int i=0;i<v[id].size();i++){
q.push({v[id][i],level+1});
}}
cout<<maxlevel<<endl;
for(int i=0;i<ans.size();i++){
if(ans[i].level==maxlevel){
cout<<ans[i].id;
if(i!=ans.size()-1)cout<<' ';
}
}
}