今天和大家分享一篇深度優先窮竭演算法,不廢話直接進入正題
有這麼乙個陣列1,2,3,4,5,7,8,11,12,15,21,33,問有沒有幾個陣列之和相加等於51的
這種問題可以用窮竭演算法來解決,大致思路是這樣的
沒有畫完,一直往下加下去,有點像二叉樹是不是,因為每乙個節點都會選擇加或者不加,那麼它的時間複雜度就是o(2^n)
這是乙個非常大的數字,所以這個並不是最優演算法,下面給出**
public class deepexhaust ;
/***
* @param i 個數
* @param sum 當前總和
* @return
*/public static boolean deepexhaust(int i,int sum)
//不加a[i]
if(deepexhaust(i+1, sum))
//加a[i]
if(deepexhaust(i+1, sum + a[i]))
return false; }
public static void main(string args)
}
我們看到這裡面首先進來判斷一下是否已經迴圈完整個陣列,如果迴圈完了,則返回當前總和是否等於給定數字k
如果沒有到最後乙個,則選擇分叉加或者不加,裡面用遞迴進行處理,不多說
最後都沒有找到則返回false
以上就是深度窮竭演算法處理這種問題,之後還會分享更優演算法
深度優先演算法和廣度優先演算法
圖形的深度優先搜尋法 void dfs int current 主程式 建立圖形後,將遍歷內容印出.void main 邊線陣列 int i for i 1 i 8 i creategraph node,20 建立圖形 printf 圖形的鄰接鍊錶內容 n for i 1 i 8 i printf ...
演算法 廣度優先演算法和深度優先演算法
廣度 bfs 和深度 dfs 優先演算法這倆個演算法是圖論裡面非常重要的兩個遍歷的方法。下面乙個例子迷宮計算,如下圖 解釋 所謂廣度,就是一層一層的,向下遍歷,層層堵截,看下面這幅圖,我們如果要是廣度優先遍歷的話,我們的結果是v1 v2 v3 v4 v5 v6 v7 v8。廣度優先搜尋的思想 訪問頂...
深度優先 迷宮演算法
前一陣一直想寫這個程式,一直沒有有效的解決儲存路徑的問題。現在想到的辦法是用佇列儲存每個節點的下表來表示路徑。這個演算法解決問的問題是 建乙個迷宮 用矩陣表示m行,n列 期中矩陣的左上角 座標為 0,0的點 為入點,找尋到所有到 m 1,n 1 的所有不重複路徑,並列印出來。注釋如下 include...