演算法學習 4 1 深度優先搜尋

2021-10-06 20:22:38 字數 1011 閱讀 9886

深度優先搜尋演算法的基本模型如下:

void

dfs(

int step)返回}

深度優先搜尋的關鍵在於解決「當下該如何做」。下一步如何做可以遞迴呼叫當下該如何做。

例如:有n張牌,輸出牌的可能排列的順序:

#include

int a[10]

, book[10]

, n;

void

dfs(

int step)

//step表示現在處理第幾個數

//此時要處理第step個資料

//按照1,2,3......n的順序試一試

for(i =

1; i <= n; i++)}

return;}

intmain()

結果:

例2:找出滿足等式()()()+()()()=()()()的九個數

#include

int a[10]

, book[10]

, total =

0, count =0;

void

dfs(

int step)

//step表示現在處理第幾個數

}return

;//返回之前的一步(最近一次呼叫dfs函式的地方)

}//此時要處理第step個資料

//按照1,2,3......n的順序試一試

for(i =

1; i <=

9; i++)}

return;}

intmain()

結果:

演算法學習 深度優先搜尋

深度優先搜尋 縮寫dfs 有點類似廣度優先搜尋,也是對乙個連通圖進行遍歷的演算法。它的思想是從乙個頂點v0開始,沿著一條路一直走到底,如果發現不能到達目標解,那就返回到上乙個節點,然後從另一條路開始走到底,這種盡量往深處走的概念即是深度優先的概念。廣度優先搜尋 bfs 是按照乙個樹的層次來完成搜尋的...

演算法學習 看看深度優先搜尋演算法

先看一題 給定整數a1,a2,a3 an,判斷是否可以從中選出若干數,使他們的和恰好為k。那麼,現在分析一下問題的需求。只需從a1開始按順序決定每個數加或者不加,在管不n個數都決定後在判斷他們的和是否為k即可。換乙個方式想,從某個狀態開始不斷的轉移狀態直到無法轉移,然後然後回退到前一步的狀態,繼續轉...

深度優先演算法學習 案例

挑戰程式設計競賽第二版 巫澤俊 1.部分和問題 給定整數a1 a2 an,判斷是否可以從中選出若干數,使他們的和恰好為k。限制條件 1 n 20 10 8 ai 108 108 k 108 題解 利用深度優先演算法,分情況計算下去,遞迴。樣例 輸入 n 4 a k 15 輸出 no include ...