1、广度优先遍历

  1. function BFS(入口坐标) {
  2. const queue = [] // 初始化队列queue
  3. // 入口坐标首先入队
  4. queue.push(入口坐标)
  5. // 队列不为空,说明没有遍历完全
  6. while(queue.length) {
  7. const top = queue[0] // 取出队头元素
  8. 访问 top // 此处是一些和 top 相关的逻辑,比如记录它对应的信息、检查它的属性等等
  9. // 注意这里也可以不用 for 循环,视题意而定
  10. for(检查 top 元素出发能够遍历到的所有元素) {
  11. queue.push(top能够直接抵达的元素)
  12. }
  13. queue.shift() // 访问完毕。将队头元素出队
  14. }
  15. }

2、递归回溯解题模板

  1. function xxx(入参) {
  2. 前期的变量定义、缓存等准备工作
  3. // 定义路径栈
  4. const path = []
  5. // 进入 dfs
  6. dfs(起点)
  7. // 定义 dfs
  8. dfs(递归参数) {
  9. if(到达了递归边界) {
  10. 结合题意处理边界逻辑,往往和 path 内容有关
  11. return
  12. }
  13. // 注意这里也可能不是 for,视题意决定
  14. for(遍历坑位的可选值) {
  15. path.push(当前选中值)
  16. 处理坑位本身的相关逻辑
  17. path.pop()
  18. }
  19. }
  20. }