21xrx.com
2024-12-22 21:18:13 Sunday
登录
文章检索 我的文章 写文章
C++语言递归实现全排列代码
2023-07-04 22:21:15 深夜i     --     --
C++ 递归 全排列 实现 代码

全排列是一种经典的问题,它可以用递归算法来求解。在 C++ 语言中,递归函数让全排列问题的解决变得简洁、优雅,本文将介绍如何使用 C++ 实现全排列问题的递归代码。

全排列的定义是在一个数组中,将元素任意交换,得到的所有数组就是这个数组的全排列。全排列问题实质上是一棵搜索树,每一层代表数组中一个数的位置,每一个节点代表交换了哪两个数。因此,可以使用递归算法来解决这个问题。

那么,如何递归地解决全排列问题呢?我们可以将问题分为两个子问题:将第一个数与它后面的数交换,然后对剩下的数进行全排列。递归的终止条件是枚举完数组中所有的数。

下面是 C++ 代码实现:


void permutation(vector<int>& nums, int begin, vector<vector<int>>& res) {

  if (begin == nums.size() - 1) {

    res.push_back(nums);

    return;

  }

  for (int i = begin; i < nums.size(); ++i) {

    swap(nums[begin], nums[i]);

    permutation(nums, begin + 1, res);

    swap(nums[begin], nums[i]);

  }

}

vector<vector<int>> permute(vector<int>& nums) {

  vector<vector<int>> res;

  permutation(nums, 0, res);

  return res;

}

在上面的代码中,我们定义了一个 `permutation` 函数和一个 `permute` 函数。`permutation` 函数负责实现全排列递归逻辑,`permute` 函数为外部提供接口,返回全排列数组。

首先,`permutation` 函数会从 begin 开始循环到数组的末尾,每次将第 begin 个数与后面的数交换,并递归求解数组中剩余数的全排列。递归终止条件即为 begin 指向数组末尾时,将此时的全排列加入结果数组中。最后,在主函数 `permute` 中调用递归函数 `permutation` 并返回结果数组。

综上所述,C++ 递归实现全排列的代码非常简单,形式优美,适用于多种场合。希望读者在学习本文之后,能够更好地理解递归算法的实现方式。

  
  

评论区

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