深度優先搜尋演算法的基本模型如下:
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 ...