【Algorithm】回溯法与深度优先遍历的异同

1、相同点:

回溯法在实现上也是遵循深度优先的,即一步一步往前探索,而不像广度优先那样,由近及远一片一片地扫。

 

2、不同点

(1)访问序

深度优先遍历:

  目的是“遍历”,本质是无序的。也就是说访问次序不重要,重要的是都被访问过了。

可以参见题Surrounded Regions,深度优先只需要把从边界起始的'O'全部访问到即可。

因此在实现上,只需要对于每个位置记录是否被visited就足够了。

回溯法:

  目的是“求解过程”,本质是有序的。也就是说必须每一步都是要求的次序。

可以参见题Word Search,需要以要求的序进行深度优先探索,必须每一步都符合要求。

因此在实现上,不能使用visited记录,因为同样的内容不同的序访问就会造成不同的结果,而不是仅仅“是否被访问过”这么简单。

要使用访问状态来记录,也就是对于每个点记录已经访问过的邻居方向,回溯之后从新的未访问过的方向去访问邻居。

至于这点点之前有没有被访问过并不重要,重要的是没有以当前的序进行访问。

 

(2)访问次数

深度优先遍历:已经访问过的节点不再访问,所有点仅访问一次。

回溯法:已经访问过的点可能再次访问,也可能存在没有被访问过的点。

posted @   陆草纯  阅读(13754)  评论(1编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2012-12-27 【PHP】关于set和get函数
2012-12-27 【PHP】构造函数没有执行
点击右上角即可分享
微信分享提示