回溯法之排列组合
Posted Hill_LAI
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了回溯法之排列组合相关的知识,希望对你有一定的参考价值。
实例数据 {1,2,3}
实现方式,巧妙的使用swap交换vector中2个数字的位置,然后在递归中循环更新每个位置的数字,就可以实现全排列
代码如下
void backTracing(std::vector<int> &data, int level, std::vector<std::vector<int>> all_arrray)
{
if (level == data.size() - 1)
{
all_arrray.push_back(data);
for (auto item : data)
{
std::cout << item << " ";
}
std::cout << std::endl;
}
for (int i = level; i < data.size(); i++)
{
swap(data[i], data[level]);
backTracing(data, level + 1, all_arrray);
swap(data[i], data[level]);
}
}
void allArray(std::vector<int> &data)
{
std::vector<std::vector<int>> all_array;
backTracing(data,0,all_array);
}
int main(int, char **)
{
std::cout << "Hello, world!\\n";
std::vector<int> array = {1, 2, 3};
allArray(array);
}
以上是关于回溯法之排列组合的主要内容,如果未能解决你的问题,请参考以下文章
《程序员面试金典(第6版)》面试题 08.08. 有重复字符串的排列组合(回溯算法,全排列问题)C++