首页 > 学院 > 开发设计 > 正文

DFS学习笔记

2019-11-10 17:19:50
字体:
来源:转载
供稿:网友

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;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表