DS & Algorithm | 回溯算法(Back Tracking)
一、回溯算法
回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。
通常适用于求解排列组合、所有路径等问题。
二、递归模板
void backTracking(索引, 选择列表)
{
if(满足条件) {
添加结果路径;
return;
}
for(可选择节点) {
选择节点;
backTracking(索引, 选择列表);
返回上一层;
}
}
三、例子
class Solution {
public:
vector<string> vs= {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
vector<string> res;
string path;
vector<string> letterCombinations(string digits) {
if(digits.length() == 0) return {};
backTracking(0, digits);
return res;
}
/* 回溯法 */
void backTracking(int index, string digits) {
if(index == digits.length()) {
res.push_back(path);
return;
}
for(int i = 0; i < vs[(int)(digits[index] - '0')].length(); i++) {
path.push_back(vs[(int)(digits[index] - '0')][i]);
backTracking(index+1, digits);
path.pop_back();
}
}
};

浙公网安备 33010602011771号