我用迭代方法解决了这个问题,但是很难使用递归方法来找到图形的最大深度。 这是编解码器问题https://codeforces.com/problemset/problem/115/A 我猜它需要图的最大深度作为解决方案。我该怎么解决。
答案 0 :(得分:0)
根据问题,您得到一棵或多棵(不是说只有一个雇员得到-1)树。
但是我认为问题很简单。您发现树的最大深度应该是组数。
因此,在将输入解析为数组之后,解决方案将是:
int employees[n];
int maxdepth = 0
for (int i = 0; i<n; ++i){
int thisDepth = 0;
int t = i;
while(employees[t] != -1)
t = employees[t];
thisDepth++;
}
if(thisDepth > maxDepth){
maxDepth = thisDepth;
}
}
递归方法如下:
int getDepth(const int i_employeeArray[], int i_employee){
if( i_employeeArray[i_employee] == -1 ){
return 0;
} else {
return 1+ getDepth(i_employeeArray, i_employeeArray[i_employee]);
}
}
int employees[n];
int maxdepth = 0
for (int i = 0; i<n; ++i){
int thisDepth = getDepth(employees, i);
if(thisDepth > maxDepth){
maxDepth = thisDepth;
}
}
可以通过为访问的字段存储计算出的深度来优化两者,但是对于这个较小的问题(<= 2000名员工)来说不是必需的。