Backtrack_0_overview

  1. Backtrack问题
  2. 回溯和不回溯的区别

Backtrack问题

解决一个回溯的问题, 本质上就是在执行一个有效的遍历的问题, 遍历空间是 [选择空间] 或者叫做 [决策空间] , 或者回溯问题说是决策树的遍历问题. 所以遇到这种问题的时候, 可以在草稿纸上把决策树画出来长什么样

在具体遍历决策空间的时候, 抓住三个核心点
1.路径 onPath: 路径是当前已经做出过的选择
2.选择空间 choices: 选择空间是当前可以做的选择
3.终止条件 termination: 达到决策树的底层, 也就是无法再做选择的条件

当必须做选择, 且有多个选择的时候

vector<int> res;
void dfs(路径, 选择列表) {
  if (满足终止条件) {
    res.push_back(路径)
    return;
  }
  for (选择 : 选择列表) {
    // 做选择操作
    dfs(路径, 选择列表)
    // 做撤销选择
  }
}

回溯和不回溯的区别

如果只有两种选择, 例如 494.目标和, 这里需要想一下做回溯和不做回溯的区别

vector<int> res;
void dfs(路径) {
  if (满足终止条件) {
    res.push_back(路径)
    return
  } else {
    dfs(路径1)
    dfs(路径2)
  }
}

转载请注明来源, from goldandrabbit.github.io

💰

×

Help us with donation