【问题标题】:stopping a recursive algorithm停止递归算法
【发布时间】:2013-03-24 06:12:50
【问题描述】:

有 10 个数字必须满足以下等式:

(a[0]+a[1]+a[3]+a[4]) =S

(a[9]+a[0]+a[7]+a[8]) =S

(a[2]+a[1]+a[9]+a[8]) =S

(a[2]+a[3]+a[5]+a[6]) =S

(a[8]+a[7]+a[5]+a[4]) =S

我在一个数组中有 10 个数字,通过使用递归排列算法,我尝试找到所有可能的排列来检查这些数字是否满足上述方程。 一旦找到正确的排列,我希望程序返回 true 并停止生成其他排列。这是代码,但它总是返回false。 例如对于数字 1,2,3,4,5,6,8,9,10,12 和 S=24,我们有一个答案:1,8,2,12,3,6,4,10,5 ,9 但是算法无论如何都会返回false!!!

bool permute(int *array,int i,int length, int S) { 


  if (length == i){

    if( check( array, S) )
            return true;
        else
        return false;   

  }
  int j = i;
  for (j = i; j < length; j++) { 
     swap(array+i,array+j);
     if( check( array, S) )
            return true;
     permute(array,i+1,length, S);


     swap(array+i,array+j);
     if( check( array, S) )
            return true;
  }

  return false;
}

bool check( int* a, int S){
    if((a[0]+a[1]+a[3]+a[4]) ==S && (a[9]+a[0]+a[7]+a[8]) ==S && (a[2]+a[1]+a[9]+a[8]) ==S && (a[2]+a[3]+a[5]+a[6]) ==S && (a[8]+a[7]+a[5]+a[4]) ==S)
            return true;

    return false;
}

【问题讨论】:

    标签: c++ recursion permutation


    【解决方案1】:

    您必须解决退货状态。 permute(array,i+1,length, S); 返回一个状态 - 检查它是否为真并在这种情况下返回: if(permute(array,i+1,length, S)) return true;.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-18
      • 1970-01-01
      • 2019-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多