简述
生成一个序列的全排列
算法伪代码
输入:
- 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);
}
}
版权声明:本文为a19990412原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。