搜尋演算法(深度優先和廣度優先)(待更新 )

2021-07-09 19:00:44 字數 1023 閱讀 6327

深度優先搜尋(dfs):

基本思路「:

從圖中某定點v出發:

①訪問定點u

②依次從u的未被訪問的鄰接點出發,對圖進行深度優先遍歷,直至圖中和v有路徑相通的頂點都被訪問。

③若此時圖中尚有未被訪問的定點,則從該頂點出發,重新進行深度優先遍歷,直至所有頂點均被訪問過為止。

dfs演算法的具體**實現:

const int maxn=100;

bool vst[maxn][maxn]; // 訪問標記

int map[maxn][maxn]; // 座標範圍

int dir[4][2]=; // 方向向量,(x,y)周圍的四個方向

bool checkedge(int x,int y) // 邊界條件和約束條件的判斷

void dfs(int x,int y)

for(int i=0;i<4;i++)

return; // 沒有下層搜尋節點,回溯

}

廣度優先搜尋(bfs):

基本思路「:

從圖中某定點v出發,將該頂點放入佇列中:

①如果佇列不為空,取出隊首元素,從該頂點出發,執行操作②

②遍歷當前節點v的所有未被訪問過的鄰接點,更新所有節點,並且全部放入佇列中,繼續進行操作①,直至隊列為空

bfs演算法的**具體實現:

const int maxn=100;

bool vst[maxn][maxn]; // 訪問標記

int dir[4][2]=; // 方向向量

struct state // bfs 佇列中的狀態資料結構

;state a[maxn];

boolcheckstate(state s) // 約束條件檢驗

void bfs(state st)

for(int i=0;i<4;i++) }

q.pop(); // 隊首元素出隊

} return;

}

深度和廣度優先搜尋演算法

在社交網路中,有乙個六度分割理論,具體是說,世界上任何互不相識的兩人,平均只需要六步就能夠建立起聯絡。乙個使用者的一度連線使用者就是他的好友,二度連線使用者就是他好友的好友,三度連線使用者就是他好友好友的好友。給定乙個使用者,如何找出這個使用者的所有三度 包括一度 二度和三度 好友關係呢?我們知道,...

深度優先與廣度優先搜尋演算法

1.深度優先搜尋演算法 depth first search.其過程簡要來說是對每乙個可能的分支路徑深入到不能再深入為止,而且每個節點只能訪問一次.深度優先遍歷圖的方法是,從圖中某頂點v出發 1 訪問頂點v 2 依次從v的未被訪問的鄰接點出發,對圖進行深度優先遍歷 直至圖中和v有路徑相通的頂點都被訪...

廣度優先搜尋演算法

廣度優先搜尋 bfs 這個是第乙個研究的課題,廣度優先搜尋也叫寬度優先搜尋,英文為breadth first searth,開始看的時候一頭霧水,基本也能懂大致意思,但是還不是真正的理解,今天又仔細看看,大致理解上又更深了一層吧。下面來總結下,自己的一些體會,以及對它的獨到的理解。大的方面來說它是一...