DFS(深度優先搜索) 比較暴力功利,大意是將某一個狀態開始不斷轉移到下一個狀態,直到不能轉移,然后退回到前一個分枝的另一個下一個狀態以此類推,直到找到最終的解
心得:找到終止條件和分支的條件
例題:從N個數中找到其中的幾個數使他們的和恰好為K
#include<iostream>#define maxn 10000using namespace std;int a[maxn];int n,k;bool dfs(int i,int sum){ if(i==n) return sum==k; //終止條件 if(dfs(i+1,sum)) return true; //分支條件 else if(dfs(i+1,sum+a[i])) return true; return false;}int main(){ cin>>n; for(int i=0;i<n;i++) cin>>a[i]; cin>>k; if(dfs(0,0)) cout<<"yes"<<endl; else cout<<"no"<<endl; return 0;}新聞熱點
疑難解答