詳解深度優先搜尋

2021-08-05 20:36:34 字數 1300 閱讀 1398

在圖、樹有關的問題中用處很大。

1、基本框架

對於初學者《啊哈!演算法》(紀磊著,人民郵電出版社)是一本不錯的書,比較兒童化,例子很形象,這裡的一些東西摘錄自這本書,在此致謝。。。

但是我要吐槽一下作者使用陣列居然是從1開始的。。。這。。。。。。很不計算機=。=

基本框架:

/*dfs的框架*/

void dfs(int step)

for(i=1;i<=9;i++)

} return;

}int main()

一共168種

關於這個問題的**:

可以看成出if{}裡的那個return是非常必要的,如果不return程式就回不去了。

(2)走迷宮

有乙個n行m列的迷宮,例如n=5,m=4:

0 0 1 0

0 0 0 0

0 0 1 0

0 1 0 0

0 0 0 1

其中1表示障礙物,0表示空地。現在給定你的位置座標和你女朋友(或者男朋友)的位置座標,例如1 1 4 3,表示你處在(1,1),你的女票/男票處在(4,3),假定女票/男票不移動,那麼找到女票/男票最少需要多少步?

#includeusing namespace std;

#define maxsize 51

int n,m,p,q,min_step=int_max;

int a[maxsize][maxsize],book[maxsize][maxsize];//a存放地圖,book為1表示走過,0表示沒走過

void dfs(int x,int y,int step),,,};//向右、下、左、上四個方向走

作者的習慣是陣列下標從1開始所以這裡的(1,1)相當於(0,0)。。。還是有點彆扭=。=

待續未完。。。

深度優先搜尋(入門詳解) DFS

深度優先搜尋過程簡要來說是對每乙個可能的分支路徑深入到不能再深入為止,而且每個節點只能訪問一次,就是找到與某個節點相關聯的所有情況,從中找出最優解。以乙個例子來講解這種演算法的基本思路 描述1 2 3 4 5 6 7 1 2 3 4 圖 1 wall no wall no wall 圖1是乙個城堡的...

廣度優先搜尋 深度優先搜尋

前言 這幾天複習圖論演算法,覺得bfs和dfs挺重要的,而且應用比較多,故記錄一下。廣度優先搜尋 有乙個有向圖如圖a 圖a廣度優先搜尋的策略是 從起始點開始遍歷其鄰接的節點,由此向外不斷擴散。1.假設我們以頂點0為原點進行搜尋,首先確定鄰接0的頂點集合s0 2.然後確定頂點1的集合s1 頂點2沒有鄰...

廣度優先搜尋,深度優先搜尋

深度優先搜尋 depth first search 簡稱dfs。最直觀的例子就是 走迷宮 廣度優先搜尋 每個頂點都要進出一遍佇列,每個邊也都會被訪問一次,所以 時間複雜度o v e 主要消耗記憶體的是visited prev陣列 queue佇列,所以 空間複雜度o v 深度優先搜尋 每條邊最多會被訪...