• Java 資料結構教程

廣度優先搜尋 (BFS)



圖是物件集合的一種圖形表示,其中某些物件對透過連結連線。相互連線的物件由稱為頂點的點表示,連線頂點的連結稱為

正式地,圖是一對集合(V, E),其中V是頂點集,E是連線頂點對的邊集。請看下面的圖 -

Graph Basics

在上圖中,

V = {a, b, c, d, e}

E = {ab, ac, bd, cd, de}

廣度優先搜尋 (BFS)

廣度優先搜尋 (BFS) 演算法以廣度優先的方式遍歷圖,並使用佇列來記住在任何迭代中遇到死衚衕時,下一個要開始搜尋的頂點。

Breadth-first Search

如上例所示,BFS 演算法首先從 A 到 B 到 E 到 F,然後到 C 和 G,最後到 D。它採用以下規則。

  • 規則 1 - 訪問相鄰的未訪問頂點。將其標記為已訪問。顯示它。將其插入佇列。

  • 規則 2 - 如果未找到相鄰頂點,則從佇列中刪除第一個頂點。

  • 規則 3 - 重複規則 1 和規則 2,直到佇列為空。

步驟 遍歷 描述
1 Breadth-first Search Step1

初始化佇列。

2 Breadth-first Search Step2

我們從訪問S(起始節點)開始,並將其標記為已訪問。

3 Breadth-first Search Step3

然後我們從S看到一個未訪問的相鄰節點。在本例中,我們有三個節點,但按字母順序我們選擇A,將其標記為已訪問並將其入隊。

4 Breadth-first Search Step4

接下來,S的未訪問相鄰節點是B。我們將其標記為已訪問並將其入隊。

5 Breadth-first Search Step5

接下來,S的未訪問相鄰節點是C。我們將其標記為已訪問並將其入隊。

6 Breadth-first Search Step6

現在,S沒有未訪問的相鄰節點了。因此,我們出隊並找到A

7 Breadth-first Search Step7

A我們有D作為未訪問的相鄰節點。我們將其標記為已訪問並將其入隊。

在這個階段,我們沒有未標記(未訪問)的節點了。但根據演算法,我們繼續出隊以獲取所有未訪問的節點。當佇列清空時,程式結束。

廣告

© . All rights reserved.