zoukankan      html  css  js  c++  java
  • 递归生成全排

    对n个元素进行全排,可以归结到他的下一级:

        1,拿出第1个元素放在最全面,将后面的n-1个元素全排,然后将第1个元素归到开始位置

        2.拿出第2个元素放在最全面,将后面的n-1个元素全排,然后将第2个元素归到开始位置

    …………………………

        n,拿出第n个元素放在最全面,将后面的n-1个元素全排,然后将第n个元素归到开始位置

    比如生成abc的所有排列:
    拿出a,于是可以abc 和acb

    拿出b,于是可以bca和bac

    拿出c,于是可以cab和cba

    #include<iostream>
    #include<algorithm>/*包含了交换函数*/
    using namespace std;
    void permutation(char*p,int i,int j);
    int main(){
    char ch[100];
    cin >> ch;
    permutation(ch, 0,strlen(ch)-1);
    return 0;
    }
    void permutation(char p[], int i, int j){
    static int count = 0; /*count用来记录全排次数*/
    int k;
    if (i == j){
    /*如果只有一个元素那摩排列就是本身,说明此次的一个全排生成*/
    count++;
    cout << "Case " << count << ":";
    for (k = 0; k <= j; k++)
    cout << p[k]; /*输出一个全排*/
    cout << endl;
    }
    else /*否则在p[i:j]中有多个全排*/
    for (k=i;k<=j; k++){
    swap(p[i], p[k]); //交换位置,将第k个数提前
    permutation(p, i+ 1, j); //递归调用
    swap(p[i], p[k]); //将位置还原
    }
    }

  • 相关阅读:
    01-发送你的第一个请求
    postman使用
    java poi导出多sheet页
    base64加密解密
    Django crontab
    super().__init__()
    paramiko模块
    列表转json数据返回
    socket模块判断ip加端口的连通性
    登录拦截器
  • 原文地址:https://www.cnblogs.com/td15980891505/p/4439974.html
Copyright © 2011-2022 走看看