zoukankan      html  css  js  c++  java
  • 关于全排列的递归

            今天重新看了下关于全排列的递归,觉得这个算法这是太精妙了。

            首先,求n个数的全排列,可先求出n-1个数的全排列,这就利用了递归;其次,由于全排列有顺序之分,某一个确定的数可以在任意的位置上,即有n种情况,这就可以利用for循环。

    template<class T>
    void Perm(T list[],int k,int m)
    {
        if(k==m)
        {
            for(int i=0;i<=m;i++)
            cout<<list[i]<<" ";
            cout<<endl;
        }
        else
        for(int i=k;i<=m;i++)
        {
            Swap(list[i],list[k]);
            Perm(list,k+1,m);
            Swap(list[i],list[k]);
        }
    }

    今天突然发现STL集成的函数中含有关于全排列的函数  next_permutation(参数一起点指针,参数二终点指针) 和 prev_permutation(参数一起点指针,参数二终点指针)

     只要包含头文件#include<algorithm>就可以用了

    短短的几行代码居然能够执行如此复杂的东西,算法真实太奇妙了!

                   自勉

    D的小L

    时间限制:4000 ms  |  内存限制:65535 KB
    难度:2
     
    描述
          一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给匡匡出了个题目想难倒匡匡(小L很D吧),有一个数n(0<n<10),写出1到n的全排列,这时匡匡有点囧了,,,聪明的你能帮匡匡解围吗?
     
    输入
    第一行输入一个数N(0<N<10),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个整数x(0<x<10)
    输出
    按特定顺序输出所有组合。
    特定顺序:每一个组合中的值从小到大排列,组合之间按字典序排列。
    样例输入
    2
    2
    3
    样例输出
    12
    21
    123
    132
    213
    231
    312
    321





    #include<iostream>
    #include<algorithm>
    #include<string>
    using namespace std;
    int main()
    {
    int n,k;
    cout<<"请输入要实验的次数"<<endl;
    cin>>n;
    while(n--)
    {
    cout<<"请输入此次实验的值"<<endl;
    cin>>k;
    string s,s1;
    for(int i=1;i<=k;i++)
    {
    s+=i+'0';
    }
    cout<<s<<endl;
    while(next_permutation(s.begin(),s.end()))
    {
    //s=next_permutation(s.begin(),s.end()); //这句话是多余的,
    cout<<s<<endl; //next_permutation直接就把s的值改变了,不需要画蛇添足
    }
    }
    return 0;
    }



  • 相关阅读:
    C# 文件上传下载
    javaScript的三种储存方式
    XDocument常用属性
    NoSQL
    SQLserver 的分页存储过程
    Redis Wendows安装步骤
    C#和JS获取时间
    api跨域
    以太坊开发DApp入门教程——区块链投票系统(一)
    android和java以太坊开发区块链应用使用web3j类库
  • 原文地址:https://www.cnblogs.com/zdblog/p/3613081.html
Copyright © 2011-2022 走看看