#include <iostream>
#include <vector>
#include <memory>
using namespace std;
//123 132 213 231 312 321
void fun(vector<vector<int>> &v,vector<int> &temp,vector<int> &inital,vector<bool> &use)
{
if (temp.size()==inital.size())
{
v.push_back(temp);
return;
}
for (int i = 0; i < inital.size(); i++)
{
if (use.at(i) == true)
{
temp.push_back(inital[i]);
use.at(i) = false;
fun(v, temp, inital, use);
temp.erase(temp.end() - 1);
use.at(i) = true;
}
}
}
int main()
{
vector<int> inital={1,2,3,4};
//shared_ptr<vector<int>> temp = make_shared<vector<int>>();
vector<int > temp;
vector<vector<int>> v;
vector<bool> use(inital.size(),true);//最初全部设置可用
fun(v,temp,inital,use);
for (auto x : v)
{
for (auto y : x)
{
cout << y<< " ";
}cout << endl;
}
system("pause");
return 0;
}
今天的算法课讲了递归和分而治之,还记着第一次听这个名词是<<开讲啦>>Robin说的,今天专业的学习了一下。以全排列为例子,123三个数写出所有的排列方法。分而治之指的是把一个大问题分为若干小问题,每个小问题和
大问题一样。全排列的具体实现,设置参数答案,每个子答案,待选数组,还有一个bool的数组来判断是否可以选,
便利待选数组,没被选过就放进子答案中,然后设置不可选,当子答案和待选数组数量一样结束,然后擦除选过的
子答案最后元素,并将之前的设置成可选。