找出1到n所有不重复的排列,即n的全排列。

来源:互联网 发布:淘宝童鞋运动少女 编辑:程序博客网 时间:2024/05/20 07:35

解法一:

#include <iostream>#include <vector>using namespace std;//打印结果void printSolution(const vector<int> &v){    for (vector<int>::const_iterator it = v.begin();it != v.end();++it)    {        cout<<*it<<' ';    }    cout<<endl;}//构造递归函数,放第i个位置的数void fun(vector<int> &v, vector<int> &f, int i){    int n = v.size();    for (int j=1;j<=n;++j)    {        //如果数j没有出现过,则第i个位置放j        if (!f[j-1])        {            f[j-1] = 1;            v[i] = j;            //如果数全部放完,则打印结果            if (i == n-1)            {                printSolution(v);            }            else            {                fun(v, f, i+1);            }            //回溯            f[j-1] = 0;        }    }}int main(){    cout<<"输入n的值:";    int n;      cin>>n;    if (n<1)    {        cout<<"输入有误!"<<endl;        exit(1);    }    //记录全排列    vector<int> v(n,0);    //f[i]记录i+1是否出现过    vector<int> f(n,0);    fun(v, f, 0);    return 0;}

运行结果:
这里写图片描述

1 0
原创粉丝点击