十四. 回溯, dfs

回溯模板:for循环里做dfs,回溯是特殊的dfs

res = []

def backtrack(选择列表, path):
    if 满足结束条件:
        res.append(path[:]) # 深度拷贝
        return
    for 选择 in 选择列表:
        if 满足选择条件:
            path.append(选择)
            backtrack(选择列表, path)
            path.pop()

dfs 和 bfs 区别:dfs使用递归,bfs使用 循环+队列

dfs是特殊的递归

图的 DFS与树的DFS最大的不同之处在于,遍历中可能遇到遍历过的结点。

回溯 < dfs < 递归

岛屿问题dfs模板:

力扣

def dfs(grid, i, j):
    # 判断 base case
	# 判断坐标 (i, j) 是否在网格中
    if not (0 <= i < len(grid) and 0 <= j < len(grid[0])): return
    # 如果这个格子不是岛屿,直接返回
    if grid[i][j] != 1: return
    grid[i][j] = 2; # 将格子标记为「已遍历过」 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值