BFS DFS演算法小總結

2021-09-02 10:55:17 字數 1536 閱讀 8962

(先說明,這篇部落格記載了一些比較水的,入門的搜尋,如果想找高階點的,這篇可能會讓各位失望的喔!~待啥時候這篇部落格寫豐富了再把這句話刪了)

bfs:

1.迷宮問題

這個題可以說的上是廣搜裡面最經典的一道入門題目了,個人覺得這個例題很好地表現了廣度優先搜尋是如何與佇列先進先出(fifo)的思想聯絡起來的,通過不斷取得某個狀態後能夠達到的所有狀態並將其加入佇列, 並且由於佇列本身的特性先加入佇列的狀態總是先得到處理,這樣就達到了乙個目的:總是先將需要轉移次數更少的狀態進行分析處理,換句話說就是總是取得了這個狀態的樹中更接近根部的節點,又或者是總是讓搜尋樹的廣度得到盡可能增加。

2.poj 3278 catch that cow

這個題思路比較簡單,所以寫的時候也比較好寫,適合新手拿來練手,增加自信。

3.poj 3984 迷宮問題

這道題也是一道比較好的模板題吧,在原本走迷宮的基礎上還要記錄路徑,其實在演算法實現上也比較簡單,只需要在結構體裡再定義乙個變數來記錄當前位置的前乙個位置,等到了終點以後再把位置逆序輸出就好了。

4.poj 2251 dungeon master(三維bfs)

題目看起來很厲害,實際上看懂了並不難,開乙個三維的陣列,這裡需要注意的是第一維是高度,然後就是簡單的bfs了,還有不同就是三維的時候有六個方向可以走,平常我們做廣搜題是四個方向,在前後左右的基礎上多了乙個向上和向下的走法,還有乙個問題就是多個輸入樣例要注意每次都要初始化,我做的時候就因為這個wa了好幾次,最後在學姐的幫助下才改出來

5.uva - 11624 fire!(雙層bfs)

一開始做的時候感覺好厲害,其實就是用兩遍bfs,第一次先把火燒到地圖上的每個地方的時間算出來,就是先把地圖處理一遍,然後就是走迷宮問題了。

6.hdu 2612 find a way(雙層bfs)

這道題也是用兩遍bfs,先把地圖處理了,然後把兩個人的路程加起來找最小就好了。

dfs:

1.hdu 1241 oil deposits

我覺得這個題是比較能夠體現出深搜的思想了:從最開始的狀態出發,遍歷所有可以到達的狀態。適合初學者來增加對深搜的理解。

2.poj 2386 lake counting

模板題,基本上和上邊的題是一樣的。

3.poj 1164 the castle

大概也算的上是模板題,然後在這個基礎上又算合併出的最大的塊有多少小塊。

4.poj 1321 棋盤問題

在乙個給定形狀的棋盤(形狀可能是不規則的)上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列。乙個乙個的放棋子,搜尋所有滿足題意的狀態。

排序演算法小總結

幾種常見的排序演算法,1,氣泡排序 2,插入排序 3,選擇排序 4,快速排序 include stdio.h void swap int a,int b 氣泡排序,注意j 從1開始到n i void maopao sort int s,int n 插入排序 從第乙個數開始,看看到它前面的人有沒有人不...

雜項演算法小總結

很多知識不好整理,這篇文章總結一些雜亂的東西,涉及的內容有,texttt 矩陣乘法 本來應該寫在代數裡面的,但我的代數知識少得可憐,就寫在雜項裡面了 高斯消元,texttt 掃瞄線,隨機化與模擬退火 還沒學,學了會寫的 玲瓏杯 round15 g鹹魚拷問 st 表,本質上是一種 dp 設 f i j...

資料結構 演算法(搜尋類 BFS DFS )

計算從起點 start 到終點 target 的最近距離 int bfs node start,node target 劃重點 更新步數在這裡 param origin source 一般是給定的輸入 param track res 期望的最終結果 param single track 期望目標結果...