1-n 排序是一道很经典的枚举法的题目,通过这道题目可以训练递归思想以及枚举思想。
思路
先输出所有以1开头的序列,再输出以2开头的序列······最后输出n开头的序列。
再来看以1开头的序列,第一位是1,后面是2-n的排列以此类推。所以可以总结出递归函数需要两个参数:
1、已经确定的前面的序列。
2、需要进行全排列的元素集合来确定第一个元素。
伪代码
void print_permutation(序列A,集合S)
{
if(S为空)输出序列A; // 所有元素都排完了
else 按照从大到小的顺序依次考虑S中的每个元素v
{
print_permutation(在A的末尾添加v后的新序列,S-{v});
}
}
代码
#include <iostream>
using namespace std;
void print_permutation(int n, int A[], int cur);