首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >停止递归算法

停止递归算法
EN

Stack Overflow用户
提问于 2013-03-24 14:12:50
回答 1查看 122关注 0票数 0

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

(a+a1+a3+a4) =S

(a9+a+a7+a8) =S

(a2+a1+a9+a8) =S

(a2+a3+a5+a6) =S

(a8+a7+a5+a4) =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!

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

发布于 2013-03-24 14:16:22

您必须解决返回状态。permute(array,i+1,length, S);返回一个状态-检查它是否为真,在本例中返回:if(permute(array,i+1,length, S)) return true;

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15595736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档