廣度優先遍歷(一) 全排列

2021-10-07 12:32:16 字數 1160 閱讀 3568

前言

廣度優先遍歷、回溯減枝、本質上都是樹(決策樹)的遍歷。

回溯演算法框架:

leetcode 46.全排列

原題鏈結

給定乙個 沒有重複 數字的序列,返回其所有可能的全排列。

示例:輸入: [1,2,3]

輸出:[

[1,2,3],

[1,3,2],

[2,1,3],

[2,3,1],

[3,1,2],

[3,2,1]

]分析:這道題有多種不同的演算法,這裡我利用bfs演算法。

可以從數學上得全排列方法獲得借鑑:

第乙個數字選1,有多少中排列

第乙個選2,有多少種排列

…演算法可以用一顆樹來描述:

決策樹的遍歷

你只需要思考 3 個問題:

1、路徑:也就是已經做出的選擇。

2、選擇列表:也就是你當前可以做的選擇。

3、結束條件:也就是到達決策樹底層,無法再做選擇的條件。

這三個問題在**中的體現:

1)路徑:pre,儲存從跟節點到當前節點的路徑

2)選擇列表:nums,每個節點擁有的分支

3)結束條件:if(n==1),也就是當前節點是葉子節點則結束。

決策樹的演算法並不複雜,但是大家最好自己動手,體會一下是如何遍歷、如何停止、上下層資訊如何傳遞。 宣告

**是我自己寫到ac,但是上面的我看題解的時候拿的,原來是labuladong大佬的題解,他在github有乙個幾萬star的演算法學習專案,大家感興趣的可以去看看。

廣度優先遍歷

廣度優先遍歷 breadth first search 類似於對樹的層序遍歷 遍歷規則為 首先訪問初始點vi,並將其標記為已訪問過,接著訪問vi的所有未被訪問過的鄰接點,其訪問次序可以任意,假定依次為vi1,vi2,vit,並均標記為已訪問過,然後在按照vi1,vi2,vit的次序,訪問每乙個頂點的...

廣度優先遍歷

還是上面那道題 深度遍歷一般是用遞迴,深度不斷增加,廣度搜尋一般用佇列這樣的形式儲存東西 include include using namespace std struct note int main book 51 51 int next 4 2 int head,tail int i,j,k,...

廣度優先遍歷

def printnodeatlevel treenode,level 按層序遍歷輸出樹中某一層的值 if not treenode or level 0 return 0 if level 0 print treenode.val return 1 printnodeatlevel treenod...