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]); //将位置还原
    }
    }

  • 相关阅读:
    介绍几个程序员常去的网站
    你这辈子,为什么富不起来?!
    Bug解决:mysql 创建表字段Double类型长度
    RedisTemplate5种数据结构操作
    StringRedisTemplate与RedisTemplate区别
    Redis客户端信息的存取
    Anaconda安装pygame
    springboot启动报错
    idea上传项目到github
    Docker安装报错
  • 原文地址:https://www.cnblogs.com/td15980891505/p/4439974.html
Copyright © 2011-2022 走看看