遞迴的深度講解 dfs

2021-10-25 04:11:16 字數 1857 閱讀 5038

遞迴就是自己呼叫自己的過程(雖然這就話在很多部落格上都這麼說,但我還是要說一遍)。

但是在學習遞迴的過程中,千萬不要像上面這麼理解(ಡωಡ)

因為你會像套娃一樣的套個不停(強迫症(ಡωಡ))

思路一:

所以你要把內部的遞迴理解為呼叫其他的函式,例如:

void

dfs(

int index)

保持這個思路繼續往下:

思路二:

在遞迴的過程中只要考慮特殊的狀態就ok了。其實特殊的狀態只有兩個,那就是

1.中心

2.邊界

中心可以理解為一般的情況

邊界可以理解為特殊的情況

以下的教程都基於這兩個思路來進行

我們通過舉幾個例子講解一下:

1.全排列

將1-9這九個數字進行位數為3的全排列

就像這樣子123、199、927

直接上**(ಡωಡ)

dfs函式是這樣

void

dfs(

int range,

int index,string str)

else

}}

主函式是這樣

int

main()

整體思路:

通過增減字串來達到儲存一次匹配成功的狀態

這個例子是通過遍歷數字的每一位位數遍歷從後往前,到0時停止

看到這裡可能會感覺(看)(求)(不)(懂),接下來進入正題。

再把上面的**copy一遍(防丟)

void

dfs(

int range,

int index,string str)

else

}}

依據思路二:

這裡的中心是指:

else

}

這裡的邊界是指:

if

(index ==0)

講完了(ಡωಡ)

(ಡωಡ)

接下來講組合

#include

#include

using

namespace std;

int book[

100]

;void

dfs(

int range,

int index,string str)

else}}

}int

main()

看完之後是不是覺得和排列大同小異(ಡωಡ),其實只多了乙個book陣列,用來記錄這個數字每一位的使用情況,如果是1,表示使用過,如果是0,就是沒使用相當於去掉排列重複的部分

如果你看懂這些之後還有一些技巧

以後補充(ಡωಡ)

DFS的遞迴實現

對乙個例子的理解,以下是關係圖的關係矩陣,求從1開始能到哪個數 include include e include include using namespace std intconst n 5 int maze n n int visit n 1 迴圈的思路 用遞迴,一旦有更深的點就產生新的迴圈...

深度優先dfs

之所以總結一下dfs,是因為刷python題目時候遇到乙個題,單詞搜尋問題,類似於dfs思想的題目,不太會做,然後就總結一下。準備pat!depth first search英文的縮寫,翻譯過來就是 深度優先搜尋 深度優先遍歷的主要思想就是 首先以乙個未被訪問過的頂點作為起始頂點,沿當前頂點的邊走到...

遞迴演算法的講解

在正式介紹遞迴之前,我們首先引用知乎使用者李繼剛 對遞迴和迴圈的生動解釋 遞迴 你開啟面前這扇門,看到屋裡面還有一扇門。你走過去,發現手中的鑰匙還可以開啟它,你推開門,發現裡面還有一扇門,你繼續開啟它。若干次之後,你開啟面前的門後,發現只有一間屋子,沒有門了。然後,你開始原路返回,每走回一間屋子,你...