演算法筆記(DFS)

2021-08-25 11:54:27 字數 1161 閱讀 8250

輸入兩個整數 n 和 m,從數列1,2,3…….n 中隨意取幾個數,使其和等於 m ,要求將其中所有的可能組合列出來 。

1-n找到數字之和等於m,那麼如果我先找到乙個數1,剩下的任務就是在2~m-1找到求和等於m-1就夠了。那如果找到第2個數2求和小於(找到的1+2求和為3)m,接下來找3,繼續這樣往下找,如果求和大於m則不合適,說明組合不合理,這時候需要退回,說明1-2組合不合適,這時需要嘗試新的組合比如1-3反覆如此直到計算結束。

m=5,n=5為例,

下面的**來自牛客,作者沒有註明,無法引用(僅修改列印部分)。

#include 

#include

using

namespace

std;

void help(int n,int m,vector

&v,int begin)

cout

<<"\n";

}for(int i=begin;i<=m&&i<=n;i++)

}int main()

**中vector作為棧使用用來儲存可用的資料,列印邏輯是碰到m為0的時候列印。

下面是python實現:

def

get_sum

(n,m,l,begin_num):

if m == 0:

for i in l:

print(i,end=" ")

print()

else:

for i in range(begin_num,m+1):

if i<=m and i<=n:

get_sum(n,m-i,l,i+1)

l.pop()

defmain

():# n,m = input().split()

# n = eval(n)

# m = eval(m)

m = 8

n = 10

get_sum(n,m,,1)

if __name__ == '__main__':

main()

演算法筆記8 DFS

1.有n個物品,每個物品都有重量和 在不超過揹包容量v的情況下選出 之和最大,求最大價值maxvalue。思路,每個物品都有2種方法,選擇或不選擇,相當於迷宮的岔路口,遞迴中的遞迴式。而當物品總重量超過揹包容量v,在相當於迷宮中的死胡同,遞迴中的遞迴邊界。通過列舉所有選擇方案,來得出最優解。其中df...

演算法筆記之DFS與 BFS

基本思想 深度優先搜尋 dfs,depth first search 它從某個狀態開始,不斷的轉移狀態直到無法轉移狀態,然後回退到前一步的狀態,繼續轉移到其它狀態,如此不繼重複,直至找到最終的解。寬度優先搜尋 bfs,breadth first search 總是先搜尋距離初始狀態近的狀態,也就是說...

演算法筆記 深度優先搜尋 DFS

深度優先搜尋 depth first search,簡稱深搜 是一種極其常用的演算法,簡單來說,符合以下策略的就可以稱為深度優先搜尋。在圖中行走,沒有走過的點稱為 新點 所有走過的點稱為 舊點 開始時所有的點都是新點,從任意節點1出發,走向任意乙個新節點,同時將新節點標記為舊節點,然後重複此步驟。如...