枚举排列

2018-10-14  本文已影响0人  Mr_Vetr
#include<cstdio>
void print_permutation(int n,int *A,int cur){
    if(cur == n){
        for(int i=0; i<n; i++){
            printf("%d ",A[i]);
        }
        printf("\n");
    }else{
        for(int i=1; i<=n; ++i){
            int flag =1;
            for(int j=0; j<cur; j++)
                if(A[j] == i)
                    flag =0;
            if(flag){
                A[cur] = i;
                print_permutation(n,A,cur+1);
            }
        }
    }
}
int main()
{
    int n=3;
    int cur =0;
    int A[10];
    print_permutation(3,A,cur);
    return 0;
}

过程描述:

1->1,2->1,2,3
1,3->1,3,2
当i =1 循环递归压栈
在第二次的时候会有 1,2和1,3两种序列出现。
所以结果是全排列。

上一篇 下一篇

猜你喜欢

热点阅读