2013-04-07 104 views
0

我一直在試圖完成我的任務的這一部分,在過去的一天無濟於事,需要一些幫助或指導來幫助理解問題。C遞歸排列

到目前爲止,我有這樣的:

swap(int A, int B){ 
    int temp; 
    temp = A; 
    A = B; 
    B = temp; 
} 


int max_array(int array[], int arraySize) 
{ 
    int i, max=-32000; 
    for (i=0; i<arraySize; i++) 
    { 
    if (array[i]>max) 
    { 
     max=array[i]; 
    } 
    } 
    printf("%d \n Max array: ", max) 
    return(max); 
} 

int nextPermutation(int array[], int arraySize){ 
    int i; 
    n = max_array(array, arraySize); 
    if (int i; n == array[i] && i > 1; i++){ 
     swap(array[i], array[i-1]); 
    } 

    else if(int i; n == array[i]; i++){ 


    } 
} 

void main(){ 

    int intArray[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 
    //int intArray[10] = {1, 10, 3, 9, 8, 6, 7, 2, 4, 5}; 
    nextPermutation(intArray, 10); 
    int i = 0; 
    for(i = 0; i < 10; i++){ 
     printf("%d ",intArray[i]); 
    } 


} 

但是,我竭力要理解這個問題是 「如果A1,...,一個是任意排列(其中,A1,..., a是可能不同順序的數字1,2,...,n),那麼下面的過程產生「下一個」置換: (i)如果數組的最大元素不是(ii)如果最大元素爲0,1,2,則可以得到其中i> 1的第一個元素,然後產生你需要交換ai和ai-1所需要的「下一個」置換 (n = a1),然後到 產生排列(a1,...,an) 的「下一個」置換,首先找到(n-1)的「下一個」置換, ) - 元素置換(a2,...,一個 ),然後將a1追加到如此獲得的(n-1)個元素數組的末尾。「

因此它需要排列每一個可能的組合數組1,2,3,4,5,6,7,8,9,10,然後在到達此點時結束「(n,...,2,1)。這是 不具有「下一個」置換給它的唯一的排列「。

和的函數int‘nextPermutation(int數組[],INT ARRAYSIZE){’需要保持不變。

任何幫助或建議將是極好的!

+4

:交換功能不會做任何事情。 – 2013-04-07 04:30:05

+2

交換既不返回一個值,也不參照傳遞。修正第一個 – karthikr 2013-04-07 04:31:46

+0

'main'也應該返回'int'。 – 2013-04-07 04:32:34

回答

1

有你的程序中的一些錯誤,

swap() function will not affect the program as it doesn't use pass by reference. 

max_array() should find the index of the maximum value, not the maximum value itself. 

There is no recursion in your program as far as I can see. 

main() should return int. 

下面給出可能會給你一個想法的程序fragement,

int ct=-1,n=10,temp[10]={0,0,0,0,0,0,0,0,0,0}; 
    int intArray[10]={1,2,3,4,5,6,7,8,9,10}; 

    permute(int k) 
    {  
      int i;  
      temp[k]=++ct;  
      if(ct==n-1)  
      {   
       for(i=0;i<n;i++)   
       { 
         printf("%d",intArray[temp[i]]);   
       } 
       printf("\n");  
      }  
      for(i=0;i<n;i++)  
      { 
       if(temp[i]==0)  
       { 
        permute(i);  
       } 
      } 
      ct--;  
      temp[k]=0;  
    } 

    int main() 
    {  
     permute(0);  
    } 
+0

謝謝deepu我會檢查你的代碼片段尋求幫助!我也將交換功能更改爲: void swap(int array [],int A,int B){int temp; temp = array [A]; array [A] = array [B]; array [B] = temp; } 用這個調用它 swap(array,i,i-1); – user2253722 2013-04-07 05:23:02

+0

嗨Deepu,我仍然有理解排列遞歸的麻煩,我一直在改變代碼反覆哈哈,但我認爲我只是越來越多地擰它。 – user2253722 2013-04-07 07:41:50

+0

int nextPermutation(int array [],int arraySize){intl i; int n = max_array(array,arraySize); printf(「%d」,n); (arrayize <10)if(n == array [arraySize] && arraySize> 1) swap(arrayize,arraySize-1) nextPermutation(array,arraySize + 1); swap(array,arraySize,arraySize-1); } else if(n == array [i]){ swap(array,arraySize,i); nextPermutation(array,arraySize + 1); swap(array,arraySize,i); } } } – user2253722 2013-04-07 07:42:19

0

用於交換的樣品

#include <stdio.h> 

void swap(int* A, int* B){ 
    int wk; 
    wk = *A; 
    *A = *B; 
    *B = wk; 
} 

int main(void){ 
    int array[] = { 1,2,3 }; 

    swap(&array[0], &array[2]); 

    printf("array[0]=%d, array[2]=%d\n", array[0], array[2]); 

    return 0; 
}