21xrx.com
2025-04-06 02:36:52 Sunday
文章检索 我的文章 写文章
C++编写全排列算法
2023-07-05 03:07:23 深夜i     10     0
C++ 全排列 编写 算法

全排列(Permutation)是数学中的一个概念,指从给定的n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列成一列不同的排列,其排列数为n(n-1)(n-2)…(n-m+1)。

在计算机科学中,全排列也是一个经典的算法题目。下面本文将介绍如何使用C++编写全排列算法。

首先,我们需要知道全排列的生成规则:从左往右依次交换每一个位置上的元素,每一交换完成后,递归生成其余的排列。

那么,具体实现上,我们可以采用递归算法来解决这个问题。具体如下:

1. 确定一个初始串作为排列数的开端,并将其所有元素存储进一个数组中;

2. 将数组的头指针所指的第一个和所有其余元素交换位置,记录此时的排列;

3. 递归生成剩下的排列,即对数组的后n-1个元素重复步骤2,直到只剩一个元素为止。

下面是C++代码实现:

#include<iostream>
#include<algorithm>
using namespace std;
void permute(int *arr, int n, int i)
{
  if(i == n-1)
  {
    for(int j=0;j<n;j++)
      cout<<arr[j]<<" ";
    cout<<endl;
    return;
  }
  for(int j=i;j<n;j++)
  {
    swap(arr[i], arr[j]);
    permute(arr, n, i+1);
    swap(arr[i], arr[j]);
  }
}
int main()
{
  int arr[] = 3;
  int n = sizeof(arr)/sizeof(arr[0]);
  permute(arr, n, 0);
  return 0;
}

在这个实现中,我们传入了一个优化参数i,用于确定我们当前需要交换的数是哪一个。

为了方便展示,我们使用了std中的swap函数,用于快速交换元素。

最终,我们得到了输出:1 2 3,1 3 2,2 1 3,2 3 1,3 2 1,3 1 2,共计3!=6种排列的情况。

  
  

评论区