兩種基本的搜尋

2021-08-15 10:57:27 字數 615 閱讀 2992

搜尋是個(暴力的)好東西,學一學還是很有必要滴~

首先就是dfs了,這是個好東西

一般來說,它分為3個階段:遞迴——>回溯——>dfs

dfs的過程就類似於走迷宮時死磕一條路,除非走到死胡同,不然一直走下去,並且它會把所有可走的路都走一遍,因此它的效率不高,所以我們通常會加一些優化。

最常用的是剪枝和記憶化

剪枝分為可行性剪枝和最優化剪枝

可行性剪枝就是看看當前的方案是否可行,如果不行,那後面的情況都不用考慮了,直接跳過

最優化剪枝就是看看當前的解與目前的最優解哪個更優,如果當前的解已經不比目前的最優解更優了,就直接跳過

模板:

void dfs(int k)

//擴充套件結點,如

for(int i=1;i<=n;i++)

}

接著是bfs,這也是個好東西

它用的是佇列輔助,類似於在走迷宮時把當前的所有路記錄下來(儲存在佇列中),之後再去走一走

bfs可以用啟發式(如a***)優化,就是最樂觀地估計當前的最好情況(這個最好情況一般會優於實際的最優解),如果即使是最好的情況也不能比當前的最優解更優,就直接跳過

模板之前放了乙個,現在有點晚,我就不寫了

兩種基本的資料結構

棧的基本操作包括入棧push和出棧pop,棧有乙個棧頂指標top,指向最新如棧的元素,入棧和出棧操作操作都是從棧頂端進行的。佇列的基本操作包括入隊enqueue和出隊dequeue,佇列有隊頭head和隊尾tail指標。元素總是從隊頭出,從隊尾入。採用陣列實現佇列時候,為了合理利用空間,可以採用迴圈...

hdoj1728 搜尋的兩種寫法

以前的一道題目,現在拿到總覺得是dfs,然後t掉就沒什麼想法了,很狗的看了以前的寫法 以前還是看題解的ac的 是bfs,每次都要轉彎,但是之前你的達到一種他走到了死路,所以才是不得不轉彎,寫法也是非常棒,預處理的轉彎數是 1就可以達到一開始轉彎的 1抵消。dfs寫法 中間判斷兩個條件,如果是起點,不...

類似Google搜尋提示的兩種做法

做了個簡單的搜尋提示程式,類似google之類的搜尋提示,就是輸入乙個內容時,會把開頭對得上的內容顯示出來。下面可以測試看看 呵呵,這裡沒有顯示有多少條結果,當然也要做到統計也是可以的。這裡只做簡單的顯示。下面就說說兩種做法。第一種,是在使用者輸入提示資訊的時候,把使用者輸入的資訊跟應用中存的資料進...