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(路径序列输出)