zoukankan      html  css  js  c++  java
  • 全排列

    对于1个数的全排列,直接输出就可以了。

    对于两个数的全排列,例如1和2,假定1的位置不变,就退化成1个数的全排列,之后交换1和2的位置,假定2的交换两个数位置即可。

    #1和2的全排列:
    1
    2  #假定1的位置不变,就退化成1个数的全排列,直接输出即可 2 1  #交换1和2的位置,假定2的位置不变,就退化成1个数的全排列

    以此类推,可以得到n个数的全排列。

    具体算法:

    #include<iostream>
    #include<string.h>
    #include<limits>
    using namespace std;
    void swap(int *x, int a, int b){
        int tmp = x[a];
        x[a] = x[b];
        x[b] = tmp;
    }
    void full_permutation(int k, int n, int *x){
        if( k== n){
            for (int i = 0; i <n; i++)
                cout<<x[i]<<" ";
            cout<<endl;
            return ;
        }
        for(int i = k ; i < n; i++){
            swap(x, i, k);
            full_permutation(k+1, n, x);
            swap(x, k, i);
        }
    }
    
    int main(){
        int N = 3;
        int x[N] = {2,3,4};
        full_permutation(0, N, x);
        return 0;
    }

    运行结果:

  • 相关阅读:
    c++笔记3
    c++笔记2
    c++笔记1
    零点追踪(零点及量程补偿)
    优秀软件:
    Hart协议
    RL_RTX函数
    keil-rtx
    电源模块选型
    RTX51 Tiny
  • 原文地址:https://www.cnblogs.com/catpainter/p/8688886.html
Copyright © 2011-2022 走看看