有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!
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;
}发布于 2013-03-24 14:16:22
您必须解决返回状态。permute(array,i+1,length, S);返回一个状态-检查它是否为真,在本例中返回:if(permute(array,i+1,length, S)) return true;。
https://stackoverflow.com/questions/15595736
复制相似问题