21xrx.com
2024-12-22 23:11:14 Sunday
登录
文章检索 我的文章 写文章
C++实现全排列。
2023-07-05 08:08:04 深夜i     --     --
C++ 全排列 实现

全排列(Permutation)是指从n个元素中取出m个元素进行排列,共有n!/(n-m)!种排列方式,其中n!表示n的阶乘,即n*(n-1)*(n-2)*...*2*1。在C++中,使用递归函数可以方便地实现全排列。

不妨以三个元素A、B、C为例,首先定义一个函数用于交换两个元素的位置:

void swap(int& a, int& b)

  int temp = a;

  a = b;

  b = temp;

接下来,编写一个递归函数进行全排列,该函数接收三个参数,分别是当前已经排列的元素个数count、待排列的元素个数n和待排列的元素数组arr。

void Permutation(int count, int n, int arr[]) {

  if (count == n) { // 当已排列的元素个数等于待排列的元素个数时,输出全排列

    for (int i = 0; i < n; i++) {

      cout << arr[i] << " ";

    }

    cout << endl;

    return;

  }

  for (int i = count; i < n; i++) {

    swap(arr[count], arr[i]); // 交换元素位置

    Permutation(count + 1, n, arr); // 递归排列剩余元素

    swap(arr[count], arr[i]); // 恢复元素位置

  }

}

在主函数中调用该函数进行排列:

int main() {

  int arr[] = 3;

  Permutation(0, 3, arr);

  return 0;

}

该程序的输出结果为1 2 3、1 3 2、2 1 3、2 3 1、3 2 1、3 1 2,为3!种排列方式。

需要注意的是,在实际编程中,需要进行适当的错误处理,例如当n小于等于0时,直接返回。此外,也可以使用STL中的next_permutation函数来实现全排列,但是在算法上其本质与递归实现相似。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复