1. 程式人生 > >BFS算法(——模板習題與總結)

BFS算法(——模板習題與總結)

pos ref 數據 OS 三種 容器 模板 意思 ++

  首先需要說明的是BFS算法(廣度優先算法)本質上也是枚舉思想的一種體現,本身效率不是很高,當數據規模很小的時候還是可以一試的。其次很多人可能有這樣的疑問,使用搜索算法的時候,到底選用DFS還是BFS,博主覺得對於最短路搜索來說是都可以的,數據規模不大,廣搜解決最短路的效率要高一些,還有對於搜索過程中搜索的單位為1時,廣搜更合適。

  這裏總結一下BFS算法,DFS是一條路走到黑,不行再回退一步,直到所有的路都試一遍,而BFS則是需要有一種層的概念,每次走到一個狀態,將該層所有可能的狀態都加入隊列,直到某一個狀態符合條件或者隊列拓展結束。

  具體算法,先將一個起點加入隊列,將該點的下一個所有可能的情況都加入隊列,再按照加入隊列的順序,一一進行搜索。直到隊列為空或者符合條件而結束搜索。

  下面上一道練習題:http://poj.org/problem?id=3278 這道題中的人可以有三種走法,一旦走到直接結束搜索,相對於DFS來說效率更高些。

  下面上一道經典的迷宮問題:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2412這道題挺有意思的,也可以使用DFS來寫。

  之前都是使用結構體數組模擬隊列操作,也可以使用C++STL中的隊列容器來寫。

  

BFS算法(——模板習題與總結)