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;}新闻热点
疑难解答