如何使用搜索深度的递归代码找到图的最大深度?

时间:2019-06-26 04:49:20

标签: algorithm graph tree depth-first-search

我用迭代方法解决了这个问题,但是很难使用递归方法来找到图形的最大深度。 这是编解码器问题https://codeforces.com/problemset/problem/115/A 我猜它需要图的最大深度作为解决方案。我该怎么解决。

1 个答案:

答案 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名员工)来说不是必需的。