淺記dfs

dfs,深度優(yōu)先搜索,應(yīng)該算是算法之路上的一堵墻,雖然沒有動(dòng)態(tài)規(guī)劃的上限高,但是入門的難度仍然不低??薲fs好幾周,終于悟到了一點(diǎn)點(diǎn),

以最簡單的全排列問題入手,給定一個(gè)數(shù)字n,按照字典順序輸出自然數(shù)1到n所有不重復(fù)的排列,任何一個(gè)數(shù)字序列中不出現(xiàn)重復(fù)的數(shù)字,這就是全排列。

在csdn上搜了搜,全排列主流有兩種辦法,一種是通過定義兩個(gè)指針start、end控制范圍,通過交換數(shù)組中的值,不斷遞歸實(shí)現(xiàn)全排列,但是使用這種方法,實(shí)現(xiàn)的全排列并不是按字典順序排列的,因此最好用的就是用遞歸加回溯去實(shí)現(xiàn)。

遞歸回溯法需要定義一個(gè)boolean數(shù)組和一個(gè)int型數(shù)組,boolean數(shù)組用于判斷數(shù)字是否被使用過,int數(shù)組用于存放全排列組合。遞歸回溯的核心就是把for循環(huán)和遞歸用到一起,這一點(diǎn)卡了我挺長時(shí)間,但是現(xiàn)在悟到的一點(diǎn)是,可以自己代入一個(gè)數(shù)字把整個(gè)遞歸回溯的過程寫下來,在能完整的寫出來一次后,就會(huì)發(fā)現(xiàn)其實(shí)就是for循環(huán)嵌套著for循環(huán),一步一步的,從1開始去實(shí)現(xiàn)每一種全排列組合。

dfs水很深,現(xiàn)在只是悟到了一點(diǎn)點(diǎn),記錄一下自己的思路。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容