C++ 停止递归算法
有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,我们有一个asnwer:1,8,2,12,3,6,4,10,5,9 但是算法还是返回falseC++ 停止递归算法,c++,recursion,permutation,C++,Recursion,Permutation,有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,
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;
}
boolpermute(int*数组,int i,int长度,int S){
如果(长度==i){
如果(检查(数组)
返回true;
其他的
返回false;
}
int j=i;
对于(j=i;j
您必须处理退货状态。
permute(数组,i+1,长度,S)代码>返回一个状态-检查它是否为真,在这种情况下返回:
if(排列(数组,i+1,长度,S))返回true代码>您必须处理退货状态。
permute(数组,i+1,长度,S)代码>返回一个状态-检查它是否为真,在这种情况下返回:
if(排列(数组,i+1,长度,S))返回true代码>