Basic

Use case 1:所有解问题or all paths

所有解问题:all possible XXX--> 暴力解的根源

明确backtracking问题里面,所谓的一个点允许多次是什么意思?

  • alll path problem里,我们不允许同一个node在同一条path上使用多次,但是我们允许同一个node在不同path上使用多次

  • backtracking每个点有可能被访问多次,但within一条path里的每一个点最多访问一次

  • DFS Mark Visited需不需要mark visited呢?yes mark的是同一条路径上,这个点有没有被使用过

Discuss吃吐守恒,什么时候要吐呢?backtracking的时候,回溯的时候

  • 这条路径已经遍历完,准备回去尝试其他路径的时候

Recursion,Pure Recursion,Backtrack,DFS这四个词什么关系?

  • pure recursion and dfs both implemented in reucrsion way, their difference is 构建解的顺序不一样

  • pure recursion from bottom to top, dfs backtracking from top to bottom

  • backtrack is the behavior of DFS:一定有从一个分支回去再访问另一个分支

DFS MarkVisited One: Reachable/ Connectivity

DFS MarkVisited Three: Backtracking 针对use case 1:找到所有可能的路径/Solution

Backtracking High Level:说完high level心中有code能分析复杂度

  • Step 1: 什么是一个解?

  • Step 2: 如何构建一个解?

    • 每一层是什么?

    • 分支是什么?

    • 在哪收集解呢?

Use Case 2: 解的存在性问题:存不存在一个解,有没有一个解

  • 你问我存不存在一个解

  • 我只能找所有解,如果我遇到了一个解,那就存在

  • 但是题目本身没有让你求所有解

Apply 剪枝:剪枝本身就是所有DFS3的考点

  • 在use case 1里该剪的就剪

  • 只要找到了一个解,我就直接return不再遍历其他解

  • inplementation level:带return type的backtracking

  • return type:boolean是否存在一个解

Last updated