深度優先dfs與廣度bfs優先搜尋總結 例題

2022-05-02 20:12:06 字數 1379 閱讀 4873

深度優先遍歷(dfs)是對乙個連通圖進行遍歷的演算法。它的思想是從乙個頂點開始,沿著一條路一直走到底,如果發現不能到達目標解,那就返回到上乙個節點,然後從另一條路開始走到底,這種盡量往深處走的概念即是深度優先的概念。

簡而言之:不撞南牆不回頭

模板如下:

void dfs(int t)//t代表目前dfs的深度

else}}

}

#includeusing namespace std;

int a[14],b[14],c[29],d[29];//分別存橫、列、左對角線、右對角線訪問標記

int n;

int cnt=0;

void print()

if(x+1<=n)

if(y+1<=n)

}int main()

}dfs(1,1,a[1][1]); //開始深搜

cout《廣度優先搜尋較之深度優先搜尋之不同在於,深度優先搜尋旨在不管有多少條岔路,先一條路走到底,不成功就返回上乙個路口然後就選擇下一條岔路,而廣度優先搜尋旨在面臨乙個路口時,把所有的岔路口都記下來,然後選擇其中乙個進入,然後將它的分路情況記錄下來,然後再返回來進入另外乙個岔路,並重複這樣的操作。

簡而言之:地毯式搜尋或者說像水波紋一樣四散開來

模板如下:

//通常用佇列queue實現,或者有些時候用陣列模擬佇列

void bfs()}}

}

此題要求馬從某點到達某點的最少要走幾步,優先用bfs

#includeusing namespace std;

int h[8]=,z[8]=;//8個方向

int vis[410][410];

int cnt[410][410];//記錄到達每個座標點的步數

queue>q;

int n,m;

void bfs()

}}int main()

cout《此題的關鍵是通過廣搜把 1 外圍的 0 打上標記

#includeusing namespace std;

int h[4]=,z[4]=;

int n,a[35][35];

queue>q;

int main()

q.push(make_pair(0,0));

while(!q.empty())

}} for(int i=1;i<=n;i++)

cout《綜上,其實很多題dfs和bfs都可以解,但是在最短(優)路徑問題上最好用廣度優先bfs

深度優先 DFS 與廣度優先 BFS

i 圖的遍歷 在資料結構中,圖是比較常用的資料儲存方式,同樹結構一樣,圖的核心在於遍歷的方法上,對於圖的遍歷,一般有兩種方式,一種是深度優先遍歷,一種是廣度優先遍歷。ii 深度優先遍歷 dfs 簡單來講,深度優先遍歷可以理解為乙個人開著汽車,從一點開始,接著尋找這點能夠到達的其他點,若有,則開車到這...

深度優先搜尋 DFS 與廣度優先搜尋 BFS)

bfs和dfs演算法原理 通俗易懂版 圖的廣度優先搜尋 bfs 和深度優先搜尋 dfs 演算法解析 void dfs int step 把乙個陣列看成部分,第一部分是它的第乙個元素,第二部分是它後面的元素 求整個陣列的排列,可看成兩步 第一步求所有可能出現在第乙個位置的元素,即把第乙個元素與後面的所...

深度優先搜尋(DFS)和廣度優先搜尋(BFS)

先說dfs 關於dfs和bfs的搜尋題目,首先要將其轉化為樹,如迷宮,也可轉化為樹來搜尋 dfs是一條鏈一條鏈的搜尋,而bfs是逐層進行搜尋,這是他倆乙個很大的區別 給定整數a1 a2 a3 an,判斷是否可以從中選出若干個數,使得他們的和恰好為k。限制條件 樣例 4 n 1 2 4 7 a陣列 1...