深度優先搜尋(DFS)

2021-10-03 21:19:02 字數 1221 閱讀 9801

一、基礎知識

鍊錶:鍊錶在記憶體中的儲存可以不是一段連續的區域。

class

listnode

樹:鍊錶的乙個延伸,有多個結點。不管是兩個節點還是多個節點,樹當中是有層級關係的。鄰居的關係,這裡也沒有層級結構了,每個節點都是平等的。

class

treenode

圖:有向圖,只能單向行駛,a→b,但是b不能到a;無向圖,a↔b。

class

graphnode

二、深度優先搜尋的思想三、圖示理解(**於網路)

圖中數字為其被搜尋的順序

三、框架

dfs

(v)

四、**題目:找出1-10有多少種排序方式

#include

using

namespace std;

int a[10]

;itn book[10]

=;//標記數是否被使用,0為否,1為是

void

dfs(

int step)

//到達第n+1的位置時,說明擺放完成

for(

int i=

1;ireturn;}

intmain()

五、例題二叉樹的最大深度(leetcode 第 104 號問題)

};六、拓展深度優先搜尋不一定依靠遞迴來實現,還可以是函式棧來儲存之前的函式。

一般的深度優先搜尋是對之前的子問題的結果不進行儲存的。

深度優先搜尋的涵蓋面很廣。一方面,它比較好的和遞迴進行了結合;另一方面,很多其他演算法的思想得到了體現。

深度優先搜尋DFS

作為搜尋演算法的一種,dfs對於尋找乙個解的 np 包括npc 問題作用很大。但是,搜尋演算法畢竟是 時間複雜度是o n 的階乘級演算法,它的效率比較低,在資料規模變大時,這種演算法就顯得力不從心了。關於深度優先搜尋的效率問題,有多種解決方法。最具有通用性的是剪枝 prunning 也就是去除沒有用...

深度優先搜尋 DFS

深度優先搜尋 縮寫dfs 有點類似廣度優先搜尋,也是對乙個連通圖進行遍歷的演算法。它的思想是從乙個頂點v 0開始,沿著一條路一直走到底,如果發現不能到達目標解,那就返回到上乙個節點,然後從另一條路開始走到底,這種盡量往深處走的概念即是深度優先的概念。你可以跳過第二節先看第三節,還是引用上篇文章的樣例...

深度優先搜尋(dfs)

深度優先搜尋的一般步驟 1 從頂點v出發,訪問v。2 找出剛才訪問過的頂點的第乙個未被訪問的鄰接點,訪問該頂點。以該頂點為新頂點,重複此步驟,直到剛訪問的頂點沒有沒有未被訪問過的鄰接點為止。3 返回前乙個訪問過的仍有未被訪問過的鄰接點的頂點,找出該頂點的下乙個未被訪問過的鄰接點,訪問該頂點。4 重複...