“回溯法”也稱“試探法”。它是從問題的某一狀態出發,不斷“試探”着往前走一步,當一條路走到“盡頭”,不能再前進(拓展出新狀態)的時候,再倒回一步或者若干步,從另一種可能的狀態出發,繼續搜索,直到所有的“路徑(狀態)”都一一試探過。這種不斷前進、不斷回溯,尋找解的方法,稱為“回溯法”。
他的基本思想是:為了求得問題的解,先選擇某一種可能情況向前搜索,在搜索過程中,一旦發現原來的選擇是錯誤的,就退回一步重新選擇,繼續向前探索,如此反復進行,直到得到解或證明無解。
深度優先搜索求解的時候,當找到目標結點之后,還要回頭尋找初始結點到目標結點的解路徑。而回溯法則不同,找到目標結點之后,搜索路徑就是一條從初始結點到目標結點的解路徑。回溯法實際上是狀態空間搜索中,深度優先搜索的一種改進,是更實用的一種搜索求解方法。
1)深度優先搜索包含回溯,或者說回溯法是深度優先搜索的一種。
2)深度優先搜索需要控制如何實現狀態之間的轉移(拓展),回溯法就是深度優先搜索的一種控制策略。
3)回溯的過程中,並不需要記錄整棵“搜索樹”,而只需記錄從初始狀態到當前狀態的一條搜索路徑,是“線性鏈狀”的,其最大優點是占用空間少。
4)深度優先搜索可以采用遞歸(系統棧)和非遞歸(手工棧)兩種方法實現。遞歸搜索是系統棧實現一部分的回溯(如果需要記錄一些特殊信息或較多的信息,還需要另外手工記錄),而非遞歸是自己用手工棧模擬回溯的過程,所以實現起來略為復雜一點。