深度優先搜尋涉及到的概念

2021-08-30 04:14:43 字數 1093 閱讀 1031

1. 回溯

遞迴呼叫代表開啟乙個分支,如果希望這個分支返回後某些資料恢復到分支開啟前的狀態以便重新開始,就要使用到回溯技巧

全排列的交換法,數獨,部分和,用到了回溯

下乙個狀態在開始之前需要利用到之前的狀態,此時需要進行回溯,因為之前的狀態對現在的狀態存在著影響

當使用if條件的時候把限定條件加進去然後在if裡面使用呼叫dfs,這也是剪枝的一種

高階的剪枝在呼叫dfs之前對情況進行預判來進行提前剪枝

回溯與剪枝的過程中可能存在著多個平行的狀態,我們需要清楚知道這些平行狀態退回來的狀態,清楚這些狀態之後我們才可以對它們進行進一步的處理以便得到我們的目標答案。像部分和的例子,就存在著兩個平行的狀態,可以選擇兩種思路去考慮,第一種思路是一開始對於當前的元素我們可以選擇要,也可以選擇不要,第二種思路是我們一開始的時候選擇不要,也可以選擇要

但是對於這兩種思路支路退來的時候的對於接下來的處理是不一樣,第一種先選擇要,當退回來這層的時候說明我們選擇的當前的元素不能組成目標元素,我們需要在這層返回之後清除原來加入的那個元素,然後進入下乙個狀態進行搜尋,而對於我們第二種思路剛開始的時候先選擇不要,那麼退回來的時候說明選擇不要這種情況不能組成情況所以需要把當前的元素假如進來,當退回到要這個狀態的時候說明上面平行狀態下加入的元素不符合,所以需要清除掉

所以對於不同的思路對於退回來的時候的狀態的處理是不一樣的,但是有一點是相同的是退回來的時候表示當前的狀態不符合,需要往相反的情況考慮

3. dfs這一層呼叫返回之後那麼它才會執行這一層下面的**然後進入for迴圈的下乙個狀態,搜尋它的兄弟是否滿足條件,所有dfs會搜尋完所有的可能,走遍所有的路徑

4. dfs呼叫碰到return的執**況

例如執行dfs(s, 5)而此時5為dfs的出口那麼它會退回去但是不會執行dfs(s, 5)下面的**,會退到上一層dfs(s, 4)並且執行dfs(s, 4)語句下面的**,即當某乙個dfs呼叫的時候碰到遞迴出口那麼它會回退到當前的狀態(即呼叫的這一層,其中的引數對應著這一層的引數)執行這句**下面的**,每一層退出來之後都是這樣執行的,我們可以在呼叫dfs前後使用輸出語句來進行觀察和理解

dfs呼叫的過程實際上就是模擬一棵樹往下延伸的過程,走到底之後再往右邊延伸,直到所有的路徑走完了,那麼就退出dfs了

discuz涉及到的問題

其中 設定創始人 config global.php 修改 config admincp founder 1,511314 其中門戶管理中同步登陸 在discuz panel修改 construct將tbl common admincp session表中的 errorcount置為 1 panel...

微控制器開發涉及到的幾個概念

1.什麼是 dsp中的 內部上拉 和 內部下拉 dsp中介紹引腳時,註明pu,pd說是 內部上拉 和 內部下拉 就是說內部已經配置了接電源的 上拉電阻或是接地的下拉電阻。這樣,當作 為輸入埠連線oc或 coms 晶元或浮空時。訊號線平 是確定的高 低電 平。而不是不確定的浮地電平。內部上拉,相當於輸...

專案管理涉及到的文件

業務聯絡函 業務需求說明書 立項報告 立項評審報告 專案實施方案 專案組通訊錄 專案計畫與執 況跟蹤 需求規格說明書 系統介面規格說明書 總體設計 系統建設整體解決方案 軟體配置管理計畫 軟體質量保證計畫 編碼規範 源 sit測試報告和測試用例 uat測試報告和測試用例 效能測試方案與報告 上線實施...