输出1到n的全排列 (字典序) 伪代码: void print_per(序列A, 集合S){ if(S为空){ 输出序列A }else{ 按照从小到大的顺序考虑S中的每一个元素V print_per(在A的末尾添加V获得的新序列, S-{V}); } } void print_per(int n, int cur, int* a){ if(n == cur) //递归边界 for(i=0; i<n; i++) cout << a[i] << " "; else{ for(i=1; i<=n; i++){ //尝试在a[cur]中填各类整数i bool ok = true; for(j=0; j<cur && ok; j++) if(i == a[j]) //i已经在a[0] 到 a[cur]中出现过,则不能再选 ok = false; if(ok){ a[cur] = i; print_per(n, cur+1, a); //递归调用 } } } }