回溯法之排列组合

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++

leetcode 77. Combinations 组合(中等)

LeetCode回溯 JS经典题型(全排列子集与组合)汇总

LeetCode回溯 JS经典题型(全排列子集与组合)汇总

算法 ---- LeetCode回溯系列问题题解

算法 ---- LeetCode回溯系列问题题解