1、相同點:
回溯法在實現上也是遵循深度優先的,即一步一步往前探索,而不像廣度優先那樣,由近及遠一片一片地掃。
2、不同點
(1)訪問序
深度優先遍歷:
目的是“遍歷”,本質是無序的。也就是說訪問次序不重要,重要的是都被訪問過了。
可以參見題Surrounded Regions,深度優先只需要把從邊界起始的'O'全部訪問到即可。
因此在實現上,只需要對於每個位置記錄是否被visited就足夠了。
回溯法:
目的是“求解過程”,本質是有序的。也就是說必須每一步都是要求的次序。
可以參見題Word Search,需要以要求的序進行深度優先探索,必須每一步都符合要求。
因此在實現上,不能使用visited記錄,因為同樣的內容不同的序訪問就會造成不同的結果,而不是僅僅“是否被訪問過”這么簡單。
要使用訪問狀態來記錄,也就是對於每個點記錄已經訪問過的鄰居方向,回溯之后從新的未訪問過的方向去訪問鄰居。
至於這點點之前有沒有被訪問過並不重要,重要的是沒有以當前的序進行訪問。
(2)訪問次數
深度優先遍歷:已經訪問過的節點不再訪問,所有點僅訪問一次。
回溯法:已經訪問過的點可能再次訪問,也可能存在沒有被訪問過的點。