[英]stopping a recursive algorithm
有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;
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.