全排列(按字典序)

输出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);   //递归调用 
            }
        }
    } 
}