1、相同点:
回溯法在实现上也是遵循深度优先的,即一步一步往前探索,而不像广度优先那样,由近及远一片一片地扫。
2、不同点
(1)访问序
深度优先遍历:
目的是“遍历”,本质是无序的。也就是说访问次序不重要,重要的是都被访问过了。
可以参见题Surrounded Regions,深度优先只需要把从边界起始的'O'全部访问到即可。
因此在实现上,只需要对于每个位置记录是否被visited就足够了。
回溯法:
目的是“求解过程”,本质是有序的。也就是说必须每一步都是要求的次序。
可以参见题Word Search,需要以要求的序进行深度优先探索,必须每一步都符合要求。
因此在实现上,不能使用visited记录,因为同样的内容不同的序访问就会造成不同的结果,而不是仅仅“是否被访问过”这么简单。
要使用访问状态来记录,也就是对于每个点记录已经访问过的邻居方向,回溯之后从新的未访问过的方向去访问邻居。
至于这点点之前有没有被访问过并不重要,重要的是没有以当前的序进行访问。
(2)访问次数
深度优先遍历:已经访问过的节点不再访问,所有点仅访问一次。
回溯法:已经访问过的点可能再次访问,也可能存在没有被访问过的点。