回溯算法思想

简介: 回溯算法思想

这个算法做的事情很基础,就是穷举。解决一个回溯问题,实际上就是解决一个决策树的问题。

reslut = [];
def backtrack(路径, 选择列表){
    if 满足结束条件
        result.add(路径)
        return 
    for 选择 in 选择列表
        做选择
        backtrack(路径,选择列表)
        撤销选择
其核心就是for循环里面的递归,在递归之前“做选择”,在递归之后“撤销选择”。

123全排列问题:

#include<iostream>
#include<vector>
#include<map>
using namespace std;
class Solution {
public:
    vector<vector<int>> result;
    vector<vector<int>> permute(vector<int>& nums) {
        vector<bool> select(nums.size(),false);
        vector<int> path;
        trackback(select,path,nums);
        return result;
    }
    void trackback(vector<bool> select,vector<int> path,vector<int>& nums)
    {
        if(nums.size()==path.size())
        {
            result.emplace_back(path);    // emplace_back 比 push_back效率更高
            return;
        }
        for(int i=0;i<nums.size();i++)
        {
            if(select[i])
            continue;
            path.emplace_back(nums[i]);
            select[i]=true;
            trackback(select,path,nums);
            select[i]=false;
            path.pop_back();
        }
    }
};
目录
相关文章
|
5月前
|
存储 算法 程序员
【算法训练-回溯算法 二】【子集组合问题】子集、组合、子集II、组合总和
【算法训练-回溯算法 二】【子集组合问题】子集、组合、子集II、组合总和
42 0
|
5月前
|
机器学习/深度学习 存储 算法
【算法训练-回溯算法 一】【排列问题】全排列、全排列II
【算法训练-回溯算法 一】【排列问题】全排列、全排列II
49 0
|
4月前
|
算法
【算法系列篇】递归、搜索和回溯(四)
【算法系列篇】递归、搜索和回溯(四)
|
19天前
|
算法
算法系列--递归,回溯,剪枝的综合应用(3)(下)
算法系列--递归,回溯,剪枝的综合应用(3)(下)
18 0
|
19天前
|
存储 算法
算法系列--递归,回溯,剪枝的综合应用(3)(上)
算法系列--递归,回溯,剪枝的综合应用(3)(上)
23 0
算法系列--递归,回溯,剪枝的综合应用(3)(上)
|
2月前
|
算法
回溯算法练习题
回溯算法练习题
13 0
|
2月前
|
算法 Java 定位技术
【数据结构与算法】递归、回溯、八皇后 一文打尽!
【数据结构与算法】递归、回溯、八皇后 一文打尽!
|
2月前
|
算法 决策智能
深度探讨回溯算法:追寻解空间的奇妙之旅
深度探讨回溯算法:追寻解空间的奇妙之旅
|
4月前
|
算法
【算法系列篇】递归、搜索和回溯(三)
【算法系列篇】递归、搜索和回溯(三)
|
4月前
|
算法
【算法系列篇】递归、搜索和回溯(二)
【算法系列篇】递归、搜索和回溯(二)