码迷,mamicode.com
首页 > 其他好文 > 详细

求全排列的两种方法

时间:2020-05-09 20:54:57      阅读:76      评论:0      收藏:0      [点我收藏+]

标签:name   temp   恢复   两种   使用   第一个   两种方法   define   ++   

打印n个数的全排列

(1)使用stl里的next_permutation()

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    int data[4]={5,2,1,4};
    sort(data,data+4);
    do{
        for(int i=0;i<4;++i)
            cout<<data[i]<<" ";
        cout<<endl;
    }while(next_permutation(data,data+4));
    return 0; 
} 

(2)递归求全排列

#include<iostream>
using namespace std;
#define Swap(a,b){int temp=a;a=b;b=temp;}
int data[]={1,2,3,4};
int num=0;
int Perm(int begin,int end){
    int i;
    if(begin==end){   //递归结束产生一个全排列
        num++;
    }else
        for(int i=begin;i<=end;i++){
            Swap(data[begin],data[i]);//把当前第一个数和后面的所有数交换位置
            Perm(begin+1,end);        //去掉第一个数,第二个数与后面的所有数交换位置 以此类推
            Swap(data[begin],data[i]);  //恢复,用于下一次交换
        }
}
int main(){
    Perm(1,4);
    cout<<num<<endl;//打印排列总数
}

 

求全排列的两种方法

标签:name   temp   恢复   两种   使用   第一个   两种方法   define   ++   

原文地址:https://www.cnblogs.com/bxynlbyx/p/12859843.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!