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

  • 相关阅读:
    淘女郎相册爬虫(Python编写)
    在 Linux 命令行中使用和执行 PHP 代码
    PHP PhantomJs中文文档(翻译)
    PHP
    PHP
    PHP
    PHP — 用PHP实现一个双向队列
    Redis — CentOS6.4安装Redis以及安装PHP客户端phpredis
    Linux
    Memcache学习笔记
  • 原文地址:https://www.cnblogs.com/td15980891505/p/4439974.html
Copyright © 2011-2022 走看看