回溯法

设计算法从前m个大写字母(m≤26)种取出n个字母的所有排列(组合)(排列数)

#include<iostream>

using namespace std;

char *a;

bool check(int i)

{

    for(int j = 0;j < i;j++)

    {

        if(a[i] == a[j])//相同

        {

            return false;

        }

    }

    return true;

}

void output(char *a,int n)

{

    for(int i = 0;i < n;i++)

    {

        cout<<a[i] <<” “;

    }

    cout<<endl;

}

//递归回溯法

void backTrack(int i,int n,int m)

{

    if(i >= m)

    {

        output(a,m);

    }

    else

    {

        for(int j = 0;j < n;j++)

        {

            a[i] = ‘A’ + j;

            if(check(i))

            {

                backTrack(i + 1,n,m);

            }

        }

    }

}

int main()

{

    int n,m;

    cout<<“请输入前n个数:”<<endl;

    cin>>n;

    cout<<“请输入n个数中的m个数排序:”<<endl;

    cin>>m;

    a = new char[n];

    backTrack(0,n,m);

    return 0;

}

点赞