题目描述:
给你一棵以 1 为根的树,求树的深度,如下的树深为 5。
输入格式:
第一行输入一个整数 n,表示树的总点数。(1≤n≤1000)
第二行输入 n−1 个数,第 i 个数表示 i+1 的父节点标号
输出格式:
输出一个整数表示树的深度(根节点的深度为1)
Input
10
8 4 8 10 1 1 1 3 8
Output
5
观前提示
看了下其他大佬的题解,自认为是最好理解的一种
制作不易,喜欢请点个赞吧(蒟蒻的第一篇题解
——————————————————————————————
题目分析:
求树的深度,没什么好说的,但是这个输入格外扎眼
第 i 个数表示 i+1 的父节点标号
这是啥?直接输入每个节点的父节点不就好了搞这么麻烦(实际就是这个蒟蒻讨厌复杂的题目
不过仔细看看也就还好。
(1≤n≤1000) 太好了数据范围这么小,邻接矩阵我来了
mp[i+1][k]=1;
诶等等,邻接矩阵啊?哦哦,那应该这样:
mp[i+1][k]=1;
mp[k][i+1]=1;
那该怎么写深搜呢……有了!
void dfs(int sx,int step){//sx存储当前子节点,step代表深度
maxx=max(maxx,step);//只要深度变大就更新
if(vis[sx]==1) return ;//标记过就退出
vis[sx]=1;//标记
for(int i=1;i<=n;i++){
dfs(i,step+1);//遍历
}
}
乍一看没啥问题,然后就……
最新提交:
Wrong Answer
0 分
好嘛,还得在函数里找问题。
最后在经过本蒟蒻九九七十二次的修改,奉上AC代码 的模板(被打
void dfs(int sx,int step){
//更新
if(vis[sx]==0) vis[sx]=1;
else return ;
for(int i=1;i<=n;i++){
if(此节点存在){
//删除此节点的另一个端点
dfs(i,step+1);
}
}
}
int main(){
cin>>n;
for(i~n-1){
//前面教你们的输入
}
dfs(1,1);
cout<<maxx;
return 0;
}
好了,本次题解就到这里,谢谢观看
![]()
