一、概念
深度优先搜索就是回溯算法。
二、解题框架
三、leetcode例题
leetcode-46-全排列
vector<vector<int>> res;
void backtrace(vector<int>& nums, vector<int>& path, vector<bool> used) {
// 满足结束条件
if (path.size() == nums.size()) {
res.push_back(path);
return ;
}
for (int i = 0; i < nums.size(); ++i) {
if (!used[i]) {
path.push_back(nums[i]); // 做选择
used[i] = true; // 将该选择从选择列表移除
backtrace(nums, path, used);
path.pop_back(); // 撤销选择
used[i] = false; // 将该选择再加入选择列表
}
}
}
vector<vector<int>> permute(vector<int>& nums) {
vector<int> path;
vector<bool> used(nums.size(), false); // nums与used一起维护一个选择列表
backtrace(nums, path, used);
return res;
}
leetcode-113-树的路径总和Ⅱ