递归引发的血案


正确写法:

// 根据parent列表,从end到begin自底向上DFS遍历
void DFS_Path(vector>&parent,vector&s,int start,int& max_group,int& max_calc){
    // 堆栈用来存储DFS的路径
    int i,j;
    // 触底
    if(start==begining){
      max_group++;
      //s.push_back(begining);
      //show(s);
      // clacmax(s,max_calc);
      int might=0;
      for(i=s.size()-1;i>=0;i--){
        //cout<<">>"<max_calc){
        max_calc=might;
      }
      //s.pop_back();
      return;
    }
    // 未触底
    for(i=0;i

错误写法:

void DFS_Path(vector>&parent,vector&s,int start,int& max_group,int& max_calc){
  // 堆栈用来存储DFS的路径
  int i,j;
  for(i=0;i=0;i--){
        //cout<<">>"<max_calc){
        max_calc=might;
      }

      s.pop_back();
      return;
    }
  }
  return;
}

两种DFS递归的写法差异在于:

错误的写法把if...return写在了for循环里面,没有function保护情况下导致for循环中断,最后少遍历了几个解最后出错。
正确的写法把if...return些在了循环外面,避免了循环中断。

你可能感兴趣的:(递归引发的血案)