搜索算法加深

dfs与bfs:

(1)bfs更新时,每一个点到起点都应该是最短路

(2)对于求组合数(方案数),需要恢复现场,所以只能用dfs;而对于求是否存在一个方案,就不用恢复现场,用dfs和bfs都可以

(3)在dfs时,在回溯之前,每次搜的都是一条路径,所以需要一个判重数组;在bfs时,对于每一个点,每次都会扩展这个点的所有方案,所以不需要再重新来一遍,所以也需要判重数组

(4)对于bool类型的dfs,往往在false的时候不直接返回false,而是继续搜索其他方案

路径输出:

(1)题目有时要求输出方案和路径的序列,所以就要用一个前缀数组把序列存起来

(2)对于前缀数组的更新,是覆盖式的,所以对于最短路,每次更新时如果该点已经被搜过(即前缀数组有值),就不要再更新了,因为那不是最短路、

题目:        AcWing 1112. 迷宫 - AcWing(是否有一种方案)

                   AcWing 1116. 马走日 - AcWing(求方案数)

                   AcWing 1097. 池塘计数 - AcWing(判重数组)

                   AcWing 1076. 迷宫问题 - AcWing(路径序列输出)

                   AcWing 1107. 魔板 - AcWing(路径序列输出)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值