之所以總結一下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開始,沿著一條路一直走到底,如果發現不能到達目標解,那就返回到上乙個節點,然後從另一條路開始走到底,這種盡量往深處走的概念即是深度優先的概念。你可以跳過第二節先看第三節,還是引用上篇文章的樣例...