gpt4 book ai didi

c++ - 停止递归算法

转载 作者:行者123 更新时间:2023-11-28 00:47:46 24 4
gpt4 key购买 nike

有 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;
}

最佳答案

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

关于c++ - 停止递归算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15595736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com