2013-04-07 187 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; 
}