深度優先dfs

2021-10-19 09:35:39 字數 1386 閱讀 3290

之所以總結一下dfs,是因為刷python題目時候遇到乙個題,單詞搜尋問題,類似於dfs思想的題目,不太會做,然後就總結一下。

準備pat!!!

depth first search英文的縮寫,翻譯過來就是「深度優先搜尋」。

深度優先遍歷的主要思想就是:首先以乙個未被訪問過的頂點作為起始頂點,沿當前頂點的邊走到未訪問過的頂點;當沒有未訪問過的頂點時,則回到上乙個頂點,繼續試探訪問別的頂點,直到所有的頂點都被訪問。

沿著某條路徑遍歷直到末端,然後回溯,再沿著另一條進行同樣的遍歷,直到所有的頂點都被訪問過為止。

即:不撞南牆不回頭

visit//判斷是否訪問
任意選擇乙個起點v,訪問該頂點

沿深度方向,依次遍歷未訪問鄰節點

tips:每次訪問後都要將訪問的vist變成1

遞迴偽**

dfs(dep,、、、)        //dep代表目前dfs的深度

列舉下一種情況,dfs(dep+1,、、、)

}

非遞迴偽**
bool visited[maxnode];      //頂點的訪問標識陣列

void dfsinit(graph g)

w = nextadj(g,v,w); //返回:v的在鄰接點w後的鄰接點,0表示不存在

}}

小結

單詞搜尋問題

def

dfs(self,i,j,cmap,word):if

len(word)==0

:#撞南牆

return

true

#撞南牆

elif i>=

len(cmap)

or i<

0or j<

0or j>=

len(cmap[0]

)or word[0]

!=cmap[i]

[j]:

return

false

temp=cmap[i]

[j] cmap[i]

[j]=

'#' res =self.dfs(i+

1,j,cmap,word[1:

])or self.dfs(i-

1, j, cmap, word[1:

])or self.dfs(i, j+

1, cmap, word[1:

])or self.dfs(i, j-

1, cmap, word[1:

])#四種方向,其中有一種return true那這個節點即return true

cmap[i]

[j]=temp

return res

未完待續…

深度優先遍歷DFS

本文章 中的圖用鄰接矩陣來表示,所以演算法複雜度為o v 2 如果用鄰接表來表示,那麼演算法的複雜度為o v e dfs可用來判斷圖中是否有環,展現無向圖中的連通分支。通過dfs,形成乙個由多棵深度優先樹所組成的深度優先森林。將原先圖中的邊新增到該森林之後,可以將所有邊定義為以下四類 1.樹邊 森林...

深度優先搜尋DFS

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

深度優先搜尋 DFS

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