알고리즘 연습 전 n개 수의 전체 배열 (1=)

2045 단어 알고리즘 연습
제목: 숫자 n을 입력하여 이전 n개의 숫자 서열의 전체 배열을 출력합니다.
아이디어:
1、STL 라이브러리 함수nextpermutation, 코드는 다음과 같습니다
//STL    
vector> STL_function(vector &num)
{
    vector> result;
    do
    {
        result.push_back(num);
    }while(next_permutation(num.begin(),num.end()));
    return result;
}

2. 귀속 소급법: 모든 원소와 첫 번째 원소를 교환하고 교환한 후에 하위 서열을 얻어 귀속 구해 하위 서열의 전체 배열을 구한다.이렇게 이해할 수 있다. n=1일 때 단지 하나의 배열만 있고 n>1일 때 첫 번째 수와 남은 서열이 모두 배열된 배열이다.
//     
void DG_function(vector &num,int start,int end,vector> &result1)
{
    if(start==end)
        result1.push_back(num);
    for(int i=start;i<=end;i++)
    {
        swap(num[start],num[i]);
        DG_function(num,start+1,end,result1);
        swap(num[start],num[i]);
    }
}

테스트 코드:
#include 
#include 
#include 
using namespace std;
//STL    
vector> STL_function(vector &num)
{
    vector> result;
    do
    {
        result.push_back(num);
    }while(next_permutation(num.begin(),num.end()));
    return result;
}
//     
void DG_function(vector &num,int start,int end,vector> &result1)
{
    if(start==end)
        result1.push_back(num);
    for(int i=start;i<=end;i++)
    {
        swap(num[start],num[i]);
        DG_function(num,start+1,end,result1);
        swap(num[start],num[i]);
    }
}
void print(vector> v)
{
    for(vector>::iterator iter=v.begin();iter!=v.end();iter++)
    {
        vector vv=*iter;
        for(vector::iterator it=vv.begin();it!=vv.end();it++)
            cout< num;
    vector> result,result1;
    cin>>n;
    for(int i=1;i<=n;i++)
        num.push_back(i);
    result=STL_function(num);
    DG_function(num,0,n-1,result1);
    cout<

좋은 웹페이지 즐겨찾기