欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

递归生成全排列【C/C++】

发布时间:2025/4/16 c/c++ 32 豆豆
生活随笔 收集整理的这篇文章主要介绍了 递归生成全排列【C/C++】 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

简述

生成一个序列的全排列

算法伪代码

输入:

  • n:表示序列长度
  • char* a: 对应的序列

输出:

  • 这个序列的全排列

满足要求:

  • 必须使用全排列
  • 对应的代码的参数 void pomi(char *arr, int k);
  • 只能修改pomi函数内部的内容

算法思路:

k为0的时候,输出这个序列。
否则,创建一个新序列,在保持前n-k个字符都完全一样之后。选一个到第n-k位,并将后面的保持顺序放到之后。
进入到递归

#include <iostream> using namespace std; int n; char *a; void pomi(char *arr, int k); int main(){cin >> n;a = new char[n];for (int i = 0; i < n; ++i) cin >> a[i];pomi(a, n); }void pomi(char *arr, int k) {if(k==0) {for (int i = 0; i < n; ++i) cout << arr[i];cout << endl; return;}char *arr_ = new char[n];int i, j;// copy from old char* for (j = 0; j < n-k; ++j) arr_[j] = arr[j];// n-k mean n-k length char-site you have already choosen.for (i = n-k; i < n; ++i) {arr_[n-k] = arr[i];for (j=n-k+1; j <= i; ++j) arr_[j] = arr[j-1];for (j=i+1; j < n; ++j) arr_[j] = arr[j];pomi(arr_, k-1);} }

总结

以上是生活随笔为你收集整理的递归生成全排列【C/C++】的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。