21xrx.com
2024-11-22 07:20:24 Friday
登录
文章检索 我的文章 写文章
C++编写全排列算法
2023-07-05 03:07:23 深夜i     --     --
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种排列的情况。

  
  

评论区

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