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

  • 相关阅读:
    nyoj 题目19 擅长排列的小明
    nyoj 题目20 吝啬的国度
    nyoj 题目17 单调递增最长子序列
    nyoj 题目14 会场安排问题
    nyoj 题目12 喷水装置(二)
    nyoj 题目7 街区最短路径问题
    nyoj 8 一种排序
    nyoj 题目6 喷水装置
    nyoj 题目5 Binary String Matching
    nyoj 1282 部分和问题
  • 原文地址:https://www.cnblogs.com/td15980891505/p/4439974.html
Copyright © 2011-2022 走看看