寬度優先搜尋BFS

2021-10-17 20:35:39 字數 1048 閱讀 2486

小問:如果題目問最短路徑,除了bfs還可能是什麼演算法?如果問最長路徑呢?

答案:最常見的演算法中,bfs還可以用dp;如果是最長路徑的話,可以用dfs和dp。

小點:bfs的標配是佇列,dfs的標配是棧。

如果是層級遍歷的話,**實現步驟可以大體分三步:

建立乙個佇列,把起始點都放到裡面去(第一層節點)

while佇列不空,處理佇列中的節點,並擴充套件出新的節點

題目:lintcode 69. 二叉樹的層次遍歷

題目描述:給出一棵二叉樹,返回其節點值的層次遍歷(逐層從左往右訪問)。

(題外話:本題需要層級遍歷,如果碰到不需要遍歷的問題,最主要的改動是將while裡面的for迴圈去掉就成)

/**

* definition of treenode:

* class treenode

* }*/class

solution

//1、建立佇列,將起始點放入

queue

> nodequeue;

nodequeue.

push

(root)

;//2、while佇列不空,處理佇列中節點,並擴充套件出新節點

while

(!nodequeue.

empty()

)if(nullptr

!= node-

>right)

nodequeue.

pop();

} result.

push_back

(levelresult);}

return result;}}

;

寬度優先搜尋BFS

寬度優先搜尋 bfs,breadth first search 也是搜尋的手段之一。它與深度優先搜尋類似,從某個狀態出發探索所有可以到達的狀態。與深度優先搜尋的不同之處在於搜尋的順序,寬度優先搜尋總是先搜尋距離初始狀態近的狀態。也就是說,它是按照開始狀態 只需1次轉移就可以到達的所有狀態 只需2次轉...

寬度優先搜尋(BFS)

bfs,其英文全稱是breadth first search。0 1 4 2 3思路 從圖中某個節點出發,將該結點入隊,標記為已訪問。然後輸出佇列的隊首 第一次為起點 將隊首從佇列中刪除,訪問該結點的鄰接表,將未標記的相鄰結點入隊,並且標記為已訪問。接下來迴圈操作第二句話。按照上邊的圖,假設出發點為...

寬度優先搜尋bfs

好吧,今天看了bfs,其實發現基本思想也是不過如此。只是,應用還是不太會。bfs是寬度優先,從根節點開始,依次訪問它的所有鄰接點,然後再按順序訪問鄰接點的鄰接點,先被訪問的點的鄰接點先被訪問。由於要按這樣的順序訪問,所以需要用到佇列。求最短路徑和迷宮型別的題目都可以利用bfs.下面是基本步驟 1 從...