0

次の式を満たす必要がある数字は 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;
}
4

1 に答える 1

3

返品ステータスに対処する必要があります。 permute(array,i+1,length, S);はステータスを返します - それが true かどうかを確認し、この場合は次を返します: if(permute(array,i+1,length, S)) return true;

于 2013-03-24T06:16:21.547 に答える