全排列 递归和函数 两种方法

十年热恋 提交于 2020-01-19 05:09:58

直接上函数

#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
    string s;
    cin>>s;
    do
    {
        cout<<s<<endl;
    } while (next_permutation(s.begin(),s.end()));

    return 0;
}

dfs


#include <iostream>
using namespace std;
int p[100];//记录相同的数字
int a[100];//存下来
int n;//输入
void f(int k)
{
    if (k == n + 1)//当都弄完一遍的时候
    {
        for (int i = 1; i <= n; i++)
        {
            cout<<a[i];
        }
        cout << endl;
    }
    for (int i = 1; i <= n; i++)//每次都是从1开始
    {
        if (p[i] == 1)//如果在当前的数中这个数原来被a存过 就不能再要了
            continue;
        a[k]=i;//报存
        p[i] = 1;//标记
        f(k + 1);
        p[i] = 0;//回到初始 这个可能难理解一点 因为原来在上面改变过了 所以这里要变回来
    }
}
int main()
{
    cin >> n;
    f(1);
    return 0;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!