摘自《算法竞赛入门经典》
按字典序生成1~n的全排列。
伪代码:
void print_permutation(序列A, 集合S)
{
if(S为空) 输出序列A;
else 按从小到大的顺序依次考虑S的每个元素v
{
print_permutation(在A的末尾添加v后得到的新序列, S-{v});
}
}
代码:
void print_permutation(int n, int *array, int cur)
{
int i, j, ok;
if(cur == n){
for(i = 0; i < cur; i++)
printf("%d ", array[i]);
printf("\n");
}else{
ok = 1;
for(i = 0; i < n; i++){
for(j = 0; j < cur; j++){
if(array[j] == array[i])
ok = 0;
}
if(ok){
array[cur] = i;
print_permutation(n, array, cur+1);
}
}
}
}