制作排列函数,输出所有可能的数组排列?

时间:2015-10-31 17:33:06

标签: c++

我已经看到了一些如何做到这一点的例子,例如:

void permutation(char * arr, int curr, int size)
{
  if(curr == size-1)
  {
    for(int a=0; a<size; a++)
        cout << arr[a] << "\t";
    cout << endl;
}

  else
  {
    for(int i=curr; i<size; i++)
    {
        swap(&arr[curr], &arr[i]);
        permutation(arr, curr+1, size);
        swap(&arr[curr], &arr[i]);
    }
  }

}

但是,我试图创建一个只接受排列函数的数组,大小和ostream输出的函数....例如:

void Permutations(int * items,const int&amp; size,ostream&amp; out)

我无法用大小来解决如何做到这一点,究竟会怎样做呢?

1 个答案:

答案 0 :(得分:0)

这背后的想法是用最后一个字符交换每个字符,然后在同一个字符串上再次调用排列,但是大小小于1.因为我们正在使用size参数来跟踪我们正在处理的子串的大小,arr被空终止。如果需要,您可以轻松地将函数更改为具有额外的ostream参数。

大小值在开始时更改,而不是在新调用时更改,以允许优雅的sizeof(str)语法。

Live on Coliru

unsigned char a[16] = {[0 ... 15] = 0x20};