廣度優先搜尋BFS

2021-10-01 12:59:59 字數 1844 閱讀 7057

leetcode102:給定乙個二叉樹,返回其按層次遍歷的節點值。 (即逐層地,從左到右訪問所有節點)。

class

solution

res.

add(temp)

; linkedlist

backup = queue1;

queue1 = queue2;

queue2 = backup;

}return res;

}}

給你乙個 m * n 的網格,其中每個單元格不是 0(空)就是 1(障礙物)。每一步,您都可以在空白單元格中上、下、左、右移動。如果您 最多 可以消除 k 個障礙物,請找出從左上角 (0, 0) 到右下角 (m-1, n-1) 的最短路徑,並返回通過該路徑所需的步數。如果找不到這樣的路徑,則返回 -1。

示例 1:

輸入: 

grid =

[[0,0,0],

[1,1,0],

[0,0,0],

[0,1,1],

[0,0,0]

], k = 1

輸出:6

解釋:不消除任何障礙的最短路徑是 10。

消除位置 (3,2) 處的障礙後,最短路徑是 6 。該路徑是 (0,0) ->

(0,1) ->

(0,2) ->

(1,2) ->

(2,2) ->

(3,2) ->

(4,2).

class

solution,,

,};int m = grid.length, n = grid[0]

.length;

queue<

int[

]> q =

newlinkedlist

<

>()

;boolean

visited =

newboolean[40

][40]

[40*40

];// 記錄到達(x,y)需要的最小消除次數,用於剪枝

int[

] mink =

newint

[m][n]

;for

(int i =

0; i < m; i++

) visited[0]

[0][grid[0]

[0]==

0?0:

1]=true

; mink[0]

[0]= grid[0]

[0]==

0?0:

1; q.

offer

(new

int)

;int cnt =0;

while

(!q.

isempty()

)for

(int

d : dir)

int num = grid[nx]

[ny]

;// 被訪問過 或者 消除次數到達上限 或者 存在到達(nx,ny)且消除次數更少的路徑

if(visited[nx]

[ny]

[num + z]

|| num + z > k || num + z >= mink[nx]

[ny]

) mink[nx]

[ny]

= num + z;

q.offer

(new

int)

;}} cnt++;}

return-1

;}}

BFS廣度優先搜尋

廣度優先搜尋,利用佇列實現,結束標誌是隊列為空的時候 承接dfs的演算法實現的講例,對於迷宮問題我們也可以採取廣度優先搜尋實現 include iostream include cstdio include cstdlib using namespace std int map 55 55 int ...

bfs廣度優先搜尋

這一課我們來學習圖的另一種遍歷方法 廣度優先搜尋 breadth first search,簡稱 bfs 這是一種連通圖的常用遍歷策略,通常用於求起點到各點的最短路徑,以及求兩點之間的最優路徑等問題。首先我們先來看看廣度優先搜尋的具體方法吧 對於乙個連通圖,我們假設一開始所有頂點均未被訪問,廣度優先...

廣度優先搜尋bfs

bfs即廣度優先搜尋演算法,其是搜尋演算法中的一種。1.dfs常用於尋找是否存在解 其從a節點出發,選取乙個臨近點b,然後不斷深入,在搜尋完b的下屬節點 ehif 後,回到a再搜尋臨近a的c節點,以此類推。2.bfs則用於在最短的時間或最少的移動距離內找到解 其往往從a節點出發,搜尋周圍所有的圍繞節...